รายการภาพเคลื่อนไหวใน recyclerview เมื่อถูกผูกเข้ากับอะแดปเตอร์อาจไม่ใช่ความคิดที่ดีที่สุดเพราะอาจทำให้รายการใน recyclerview เคลื่อนไหวได้ด้วยความเร็วที่แตกต่างกัน ในกรณีของฉันสิ่งของที่จุดสิ้นสุดของ recyclerview จะเคลื่อนไหวไปยังตำแหน่งของพวกมันเร็วกว่าและที่ด้านบนสุดเนื่องจากที่ด้านบนมีการเดินทางไกลกว่าดังนั้นมันจึงดูไม่เป็นระเบียบ
รหัสเดิมที่ฉันใช้ในการทำให้ภาพแต่ละรายการใน recyclerview ดูได้ที่นี่:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
แต่ฉันจะคัดลอกและวางรหัสในกรณีที่ลิงค์แตก
ขั้นตอนที่ 1:ตั้งค่านี้ภายในเมธอด onCreate ของคุณเพื่อให้แน่ใจว่าภาพเคลื่อนไหวจะทำงานเพียงครั้งเดียว:
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
ขั้นตอนที่ 1 และ 2 ยังคงเหมือนเดิม
ในขั้นตอนที่ 3 ทันทีที่การเรียก API ของคุณกลับมาพร้อมกับข้อมูลของคุณฉันจะเริ่มต้นเคลื่อนไหว
private void startIntroAnimation() {
recyclerview.setTranslationY(latestPostRecyclerview.getHeight());
recyclerview.setAlpha(0f);
recyclerview.animate()
.translationY(0)
.setDuration(400)
.alpha(1f)
.setInterpolator(new AccelerateDecelerateInterpolator())
.start();
}
นี่จะทำให้ภาพ recyclerview ทั้งหมดของคุณเคลื่อนไหวได้จากด้านล่างของหน้าจอ