चूंकि इस प्रश्न के उत्तर काफी दिनांकित हैं, तो वैल्यूएनिमीटर पर निर्भर एक और आधुनिक समाधान है। यह समाधान एक सच्चे, दृश्यमान आकर्षक 3 डी-फ्लिप को लागू करता है, क्योंकि यह न केवल दृश्य को फिसलता है, बल्कि फ़्लिपिंग के दौरान इसे स्केल करता है (इस प्रकार ऐप्पल यह करता है)।
mFlipAnimator = ValueAnimator.ofFloat(0f, 1f);
mFlipAnimator.addUpdateListener(new FlipListener(frontView, backView));
और इसी अद्यतन श्रोता:
public class FlipListener implements ValueAnimator.AnimatorUpdateListener {
private final View mFrontView;
private final View mBackView;
private boolean mFlipped;
public FlipListener(final View front, final View back) {
this.mFrontView = front;
this.mBackView = back;
this.mBackView.setVisibility(View.GONE);
}
@Override
public void onAnimationUpdate(final ValueAnimator animation) {
final float value = animation.getAnimatedFraction();
final float scaleValue = 0.625f + (1.5f * (value - 0.5f) * (value - 0.5f));
if(value <= 0.5f){
this.mFrontView.setRotationY(180 * value);
this.mFrontView.setScaleX(scaleValue);
this.mFrontView.setScaleY(scaleValue);
if(mFlipped){
setStateFlipped(false);
}
} else {
this.mBackView.setRotationY(-180 * (1f- value));
this.mBackView.setScaleX(scaleValue);
this.mBackView.setScaleY(scaleValue);
if(!mFlipped){
setStateFlipped(true);
}
}
}
private void setStateFlipped(boolean flipped) {
mFlipped = flipped;
this.mFrontView.setVisibility(flipped ? View.GONE : View.VISIBLE);
this.mBackView.setVisibility(flipped ? View.VISIBLE : View.GONE);
}
}
यह है कि
पहले हम ValueAnimator की स्थापना की!
इस स्थापना के बाद आप
mFlipAnimator.start();
फोन करके देखा गया फ्लिप और
mFlipAnimator.reverse();
फोन करके दूसरा रिवर्स आप की जाँच करता है, तो दृश्य रूप से फ़्लिप किया, को लागू करने और इस कॉल करने के लिए चाहते हैं कर सकते हैं कार्य:
private boolean isFlipped() {
return mFlipAnimator.getAnimatedFraction() == 1;
}
आप यह भी जांच सकते हैं कि दृश्य वर्तमान में फ़्लिप है या नहीं इस पद्धति को लागू करने से पिंग:
private boolean isFlipping() {
final float currentValue = mFlipAnimator.getAnimatedFraction();
return (currentValue < 1 && currentValue > 0);
}
आप उपरोक्त कार्यों को जोड़ सकते हैं एक अच्छा समारोह को लागू करने के फ्लिप टॉगल करने के लिए, अगर यह या फ़्लिप नहीं है पर निर्भर करता है:
private void toggleFlip() {
if(isFlipped()){
mFlipAnimator.reverse();
} else {
mFlipAnimator.start();
}
}
यह है कि! सरल और आसान। का आनंद लें!
स्रोत
2015-02-10 11:35:06
@RAS पुस्तकालय के लिए लिंक के लिए धन्यवाद। :) शायद अगली बार यह मेरे जवाब को संपादित करने के बजाय टिप्पणियों में जा सकता है? मुझे इस पुस्तकालय के बारे में कुछ भी पता नहीं है, इसलिए यह मेरे लिए जिम्मेदार है, यह बिल्कुल सही नहीं है। हालांकि आपके इनपुट के लिए धन्यवाद! –
मैं आपकी बात समझता हूं कि कोई भी अपनी अनुमति के बिना किसी को अपनी पोस्ट संपादित करने को पसंद नहीं करता है।लेकिन यह जवाब मेरे द्वारा संपादित नहीं किया गया है। इसे किसी और द्वारा संपादित किया गया है, मैंने अभी इसे मंजूरी दे दी है और उस व्यक्ति द्वारा की गई व्याकरण गलती को हल किया है जिसने आपका जवाब संपादित किया है। यदि आप इसे देखना चाहते हैं, तो मेरे नाम और लोगो के ऊपर "संपादित" के बगल में दिखाए गए दिनांक/समय पर क्लिक करें। आप वहां पूर्ण संशोधन इतिहास देख सकते हैं। – RAS
3.0 के नीचे इस कोड का उपयोग करने के लिए निम्न lib का उपयोग करें: https://github.com/JakeWharton/NineOldAndroids। उपयोगकर्ता द्वारा योगदान: http://stackoverflow.com/users/1117511/loks –