जब वे एडेप्टर में बंधे होते हैं तो रिसाइकलव्यू में एनिमेटेड आइटम सबसे अच्छा विचार नहीं हो सकता है क्योंकि यह अलग-अलग गति से चेतन करने के लिए recyclerview में आइटम का कारण बन सकता है। मेरे मामले में, रिसाइकलव्यू के अंत में आइटम अपनी स्थिति को फिर से चेतन करता है फिर सबसे ऊपर वाले को क्योंकि शीर्ष पर आने वाले लोग यात्रा करने के लिए आगे बढ़ते हैं, इसलिए यह अस्वच्छ दिखाई देता है।
मूल कोड जिसे मैंने प्रत्येक आइटम को recyclerview में चेतन करने के लिए इस्तेमाल किया था, वह यहाँ पाया जा सकता है:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
लेकिन मैं लिंक को तोड़ने के मामले में कोड को कॉपी और पेस्ट करूंगा।
चरण 1: इसे अपने ऑनक्रीट विधि के अंदर सेट करें ताकि आप एनीमेशन को केवल एक बार चलाना सुनिश्चित करें:
if (savedInstanceState == null) {
pendingIntroAnimation = true;
}
चरण 2: आपको इस कोड को उस विधि में डालना होगा जहां आप एनीमेशन शुरू करना चाहते हैं:
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
लिंक में, लेखक टूलबार आइकन को एनिमेट कर रहा है, इसलिए उसने इसे इस विधि के अंदर रखा:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
inboxMenuItem = menu.findItem(R.id.action_inbox);
inboxMenuItem.setActionView(R.layout.menu_item_view);
if (pendingIntroAnimation) {
pendingIntroAnimation = false;
startIntroAnimation();
}
return true;
}
चरण 3: अब startIntroAnimation () के लिए तर्क लिखें:
private static final int ANIM_DURATION_TOOLBAR = 300;
private void startIntroAnimation() {
btnCreate.setTranslationY(2 * getResources().getDimensionPixelOffset(R.dimen.btn_fab_size));
int actionbarSize = Utils.dpToPx(56);
toolbar.setTranslationY(-actionbarSize);
ivLogo.setTranslationY(-actionbarSize);
inboxMenuItem.getActionView().setTranslationY(-actionbarSize);
toolbar.animate()
.translationY(0)
.setDuration(ANIM_DURATION_TOOLBAR)
.setStartDelay(300);
ivLogo.animate()
.translationY(0)
.setDuration(ANIM_DURATION_TOOLBAR)
.setStartDelay(400);
inboxMenuItem.getActionView().animate()
.translationY(0)
.setDuration(ANIM_DURATION_TOOLBAR)
.setStartDelay(500)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
startContentAnimation();
}
})
.start();
}
मेरा पसंदीदा विकल्प:
मैं पूरी तरह से recyclerview अंदर आइटम के बजाय पूरे recyclerview चेतन होगा।
STEP 1 और 2 ही रहता है।
STEP 3 में, जैसे ही आपका API आपके डेटा के साथ कॉल करता है, मैं एनीमेशन शुरू कर दूंगा।
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
यह आपके पूरे रिसाइकिलव्यू को चेतन करेगा ताकि यह स्क्रीन के नीचे से उड़ जाए।