यह मुझे कुछ दिनों के लिए फंस गया था (इसे प्री-आइस क्रीम सैंडविच काम करने के लिए) लेकिन मुझे लगता है मैं अंत में वहाँ गया है!(गौतम के और माइक इज़राइल के लिए लीड के लिए धन्यवाद) अंत में मैंने अपने View
(FrameLayout
) का विस्तार करना आवश्यक था ताकि अनुवाद सही/बाएं एनिमेशन शुरू हो सके और स्थानांतरित करने के लिए एनिमेशन के अंत को सुन सकें इस प्रकार मेरी FrameLayout
सही /, उचित रूप में छोड़ दिया:
public class SlidingFrameLayout extends FrameLayout
{
private final int durationMilliseconds = 1000;
private final int displacementPixels = 200;
private boolean isInOriginalPosition = true;
private boolean isSliding = false;
public SlidingFrameLayout(Context context)
{
super(context);
}
public SlidingFrameLayout(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public SlidingFrameLayout(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
@Override
protected void onAnimationEnd()
{
super.onAnimationEnd();
if (isInOriginalPosition)
offsetLeftAndRight(displacementPixels);
else
offsetLeftAndRight(-displacementPixels);
isSliding = false;
isInOriginalPosition = !isInOriginalPosition;
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom)
{
super.onLayout(changed, left, top, right, bottom);
// need this since otherwise this View jumps back to its original position
// ignoring its displacement
// when (re-)doing layout, e.g. when a fragment transaction is committed
if (changed && !isInOriginalPosition)
offsetLeftAndRight(displacementPixels);
}
public void toggleSlide()
{
// check whether frame layout is already sliding
if (isSliding)
return; // ignore request to slide
if (isInOriginalPosition)
startAnimation(new SlideRightAnimation());
else
startAnimation(new SlideLeftAnimation());
isSliding = true;
}
private class SlideRightAnimation extends TranslateAnimation
{
public SlideRightAnimation()
{
super(
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, displacementPixels,
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, 0);
setDuration(durationMilliseconds);
setFillAfter(false);
}
}
private class SlideLeftAnimation extends TranslateAnimation
{
public SlideLeftAnimation()
{
super(
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, -displacementPixels,
Animation.ABSOLUTE, 0,
Animation.ABSOLUTE, 0);
setDuration(durationMilliseconds);
setFillAfter(false);
}
}
}
और, अंत में, स्लाइड करने के लिए SlidingFrameLayout
दाएँ/बाएँ, तुम सब मिल गया है फोन SlidingFrameLayout.toggleSlide()
तरीका है। बेशक आप लंबे समय तक स्लाइड करने के लिए अधिक संख्या में पिक्सेल स्लाइड करने के लिए अपने SlidingFrameLayout
को ट्विक कर सकते हैं, लेकिन यह आपको शुरू करने के लिए पर्याप्त होना चाहिए :)
स्रोत
2012-07-03 11:08:14
@AdilHussain: तो आपको थ्रेड के साथ कार्यक्षमता को कार्यान्वित करना होगा अपने आप फोन पर जो इसका समर्थन नहीं करते हैं। बस जांचें कि फोन इसका समर्थन करता है या नहीं तो कुछ सरल फॉलबैक लिखें। यह सबसे अच्छा विकल्प है। – Gautam
इस शानदार लाइब्रेरी को मिला जो नौकरी करता है: [http://nineoldandroids.com] (http://nineoldandroids.com)। यहां से 'जार' के रूप में डाउनलोड करने के लिए लाइब्रेरी उपलब्ध है: [https://github.com/JakeWharton/NineOldAndroids/downloads ](https://github.com/JakeWharton/NineOldAndroids/downloads) –
ऐसा लगता है जैसे मैंने बहुत जल्द बात की थी। पुराने फोन (प्री-हनीकॉम) पर [नौल्डैंड्रॉइड] (https://github.com/JakeWharton/NineOldAndroids) लाइब्रेरी का उपयोग करके अनुवाद करते समय, अनुवादित दृश्य के भीतर बटन स्थानांतरित हो गए हैं लेकिन अभी भी उनके पुराने स्थानों में क्लिक करने योग्य हैं (और उनके नए स्थान नहीं)। मैंने पुस्तकालय के लेखक को ईमेल किया है लेकिन अभी तक कोई प्रतिक्रिया प्राप्त नहीं हुई है। –