Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android RecyclerView在滚动时重新设置视图动画_Android_Scroll_Android Recyclerview_Android Animation - Fatal编程技术网

Android RecyclerView在滚动时重新设置视图动画

Android RecyclerView在滚动时重新设置视图动画,android,scroll,android-recyclerview,android-animation,Android,Scroll,Android Recyclerview,Android Animation,我想动画的看法,点击它。我正在使用AnimatorSet 但当用户在那个时候滚动动画的状态是不正确的保持或者不清晰动画。它将设置其他项目图标的动画。 有人对此有想法吗 动画方法: public static void likeAnimation(Object object) { if (object == null) { return; } AnimatorSet set = new AnimatorSet();

我想动画的看法,点击它。我正在使用
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);
}

}

你正好赶上这个问题,我希望我不会太晚。这里的想法很简单。您必须记住,您的
RecyclerView
重用了曾经创建的每个
ViewHolder
。通常,它会创建7~8个项目,但这取决于屏幕大小。

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

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

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

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

    private void defaultState(View view){
      view.setRotation(0);
    }
    
此外,您可能希望在单击后重新设置项目的动画,如果是,您必须添加一个以上的状态,即
退出
状态,然后从该状态切换到
默认
状态


你可以通过这个找到这个想法的整个实现。

基本上,回收者视图是重用视图,这将通过布局管理器实现。滚动时,动画将显示为连续项。可以编写逻辑-开始滚动时停止动画。当您重写
onScroll()
方法时,您就知道回收器视图是否在滚动。在这种情况下,你可以停止animation@Navaspk是的,每次recyclerView调用onCreateViewHolder时,我都会使用
clearAnimation()
作为这个视图,并且我也将
clearAnimation
应用到
onViewDetachedFromWindow(ViewHolder holder)
中,但它仍然在制作动画,并且没有保持状态或停止动画。如果可能,则建议代码或其他。非常感谢。