RecyclerView 平滑滚动动画
RecyclerView Smooth Scroll animation
我使用 OnjectAnimator 为 ViewPager 实现了平滑的滚动动画。现在,我正在尝试对 recyclerView 做同样的事情,但滚动动画很突然。这是我将 ObjectAnimator 用于 viewpager 的动画。它会生成一个快照动画来演示 viewpager 的滚动功能。
ObjectAnimator objectAnimator = ObjectAnimator
.ofFloat(new PagerHintMovement(-10, viewPager), "progress", -1f, 1f);
objectAnimator.setInterpolator(new AccelerateInterpolator());
objectAnimator.setDuration(1500);
objectAnimator.setRepeatCount(1);
objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Log.i(TAG, "Animation: Starting fake drag on view pager.");
viewPager.beginFakeDrag();
}
@Override
public void onAnimationEnd(Animator animation) {
Log.i(TAG, "Animation: Ending fake drag on view pager.");
viewPager.endFakeDrag();
viewPager.setCurrentItem(viewPager.getCurrentItem());
}
@Override
public void onAnimationCancel(Animator animation) {
viewPager.setCurrentItem(viewPager.getCurrentItem());
}
@Override
public void onAnimationRepeat(Animator animation) {
if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2) {
if (animation.getInterpolator() instanceof AccelerateInterpolator) {
animation.setInterpolator(new DecelerateInterpolator());
} else {
animation.setInterpolator(new AccelerateInterpolator());
}
}
}
});
objectAnimator.setStartDelay(1000);
objectAnimator.start();
关于如何为 recyclerView 实现相同目标的任何建议?
如果您对默认 RecyclerView.smoothScrollToPosition(int)
不满意,您将需要进行一些 class 覆盖。
RecyclerView
中的平滑滚动是通过调用
触发的
LayoutManager.startSmoothScroll(RecyclerView.SmoothScroller)
当前 layoutManager
.
您可以自由覆盖 LayoutManager
并提供自定义 RecyclerView.SmoothScroller
implementation - preferably by extending RecyclerView.LinearSmoothScroller
。
如您所述,您需要平滑滚动,您可以按照以下步骤操作:
- 隐藏回收器视图并在那里显示进度条
- 创建后台异步任务,在其中设置和加载回收器视图
- 在回收器适配器中设置数据时使用回调从您的数据模型中检索数据
- 在回收站设置完成后隐藏进度条并将回收站视图设置为可见。
这将使您的回收器可以流畅地滚动和正常加载。
我使用 OnjectAnimator 为 ViewPager 实现了平滑的滚动动画。现在,我正在尝试对 recyclerView 做同样的事情,但滚动动画很突然。这是我将 ObjectAnimator 用于 viewpager 的动画。它会生成一个快照动画来演示 viewpager 的滚动功能。
ObjectAnimator objectAnimator = ObjectAnimator
.ofFloat(new PagerHintMovement(-10, viewPager), "progress", -1f, 1f);
objectAnimator.setInterpolator(new AccelerateInterpolator());
objectAnimator.setDuration(1500);
objectAnimator.setRepeatCount(1);
objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
objectAnimator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
Log.i(TAG, "Animation: Starting fake drag on view pager.");
viewPager.beginFakeDrag();
}
@Override
public void onAnimationEnd(Animator animation) {
Log.i(TAG, "Animation: Ending fake drag on view pager.");
viewPager.endFakeDrag();
viewPager.setCurrentItem(viewPager.getCurrentItem());
}
@Override
public void onAnimationCancel(Animator animation) {
viewPager.setCurrentItem(viewPager.getCurrentItem());
}
@Override
public void onAnimationRepeat(Animator animation) {
if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2) {
if (animation.getInterpolator() instanceof AccelerateInterpolator) {
animation.setInterpolator(new DecelerateInterpolator());
} else {
animation.setInterpolator(new AccelerateInterpolator());
}
}
}
});
objectAnimator.setStartDelay(1000);
objectAnimator.start();
关于如何为 recyclerView 实现相同目标的任何建议?
如果您对默认 RecyclerView.smoothScrollToPosition(int)
不满意,您将需要进行一些 class 覆盖。
RecyclerView
中的平滑滚动是通过调用
触发的
LayoutManager.startSmoothScroll(RecyclerView.SmoothScroller)
当前 layoutManager
.
您可以自由覆盖 LayoutManager
并提供自定义 RecyclerView.SmoothScroller
implementation - preferably by extending RecyclerView.LinearSmoothScroller
。
如您所述,您需要平滑滚动,您可以按照以下步骤操作:
- 隐藏回收器视图并在那里显示进度条
- 创建后台异步任务,在其中设置和加载回收器视图
- 在回收器适配器中设置数据时使用回调从您的数据模型中检索数据
- 在回收站设置完成后隐藏进度条并将回收站视图设置为可见。
这将使您的回收器可以流畅地滚动和正常加载。