RecyclerView重新设置滚动视图

时间:2017-01-19 06:26:43

标签: android scroll android-recyclerview android-animation

我想要点击它的动画视图。我使用AnimatorSet设置了该视图的动画 但是当用户滚动时,动画状态不能保持或者不能正常运行。它将为其他项目的图标设置动画。 有谁有想法呢?

动画方法:

public static void likeAnimation(Object object) {
        if (object == null) {
            return;
        }
        AnimatorSet set = new AnimatorSet();
        Object myView = object;
        set.setInterpolator(new LinearInterpolator());
        set.playTogether(
                ObjectAnimator.ofFloat(myView, "rotation", 0, 360)
        );
        set.setDuration(500).start();
    }

RecyclerView代码:

 @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  holder.imageView_like.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(final View v) {
                      likeAnimation(v);
}

}

1 个答案:

答案 0 :(得分:0)

你正好赶上这个问题,我希望我不会太迟。这里的想法非常简单。您必须记住,RecyclerView会重复使用已创建的每一个ViewHolder。通常,它会创建大约7~8个项目,但这取决于屏幕尺寸。

因此,在您的特定情况下,如果您想要在点击时为项目设置动画,则必须跟踪RecyclerView中每个项目的状态。基本上,您可以有三种状态:

  • Enter状态或您的动画。当用户点击列表中的某个项目时,您开始为该项目设置动画,并在动画结束时将项目状态切换为Animated状态。

  • Animated州。这是已设置动画的项目的状态,并且不再需要此动画,因此当用户向上/向下滚动时,您只需将视图设置为动画状态即可。在您的情况下,您可以尝试以下代码:

    private void animatedState(View view){
      //perform the same action but without animation
      view.setRotation(360);
    }
    
  • Default状态或正常状态。那是View没有旋转,只是正常状态。
    例如,

    private void defaultState(View view){
      view.setRotation(0);
    }
    

此外,您可能希望在单击时将项目设置为动画,如果是,则必须再添加一个Exit状态,然后从该状态切换到Default状态。

您可以通过此link找到此想法的完整实现。