我想要点击它的动画视图。我使用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);
}
}
答案 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找到此想法的完整实现。