我想向 itemView 添加动画,但是它们仅在项目当前正在移动时运行。例如,项目开始淡出,直到 alpha 为 0,但如果项目停止移动,动画就会暂停,项目只会淡出一半。之后,该项目需要再次开始移动才能完成动画。
我知道 onDraw
通常只会在某些内容发生变化时才会被调用,但我猜操作系统没有意识到 View 的样式也发生了变化,所以它不会调用它。
我尝试在末尾添加 invalidate()
,以便我可以强制更新,但它没有执行任何操作。
我该如何解决这个问题?
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
if (actionState == ACTION_STATE_SWIPE) {
if (optionsState == OptionState.UPVOTE) {
drawUpvoteOption(c, viewHolder.itemView, dX);
} else if (optionsState == OptionState.DOWNVOTE) {
if (!isRightSwipeMaxed(dX)) drawDownvoteOption(c, viewHolder.itemView, dX);
else drawDownvoteOption(c, viewHolder.itemView, MAX_RIGHT_SWIPE_DX);
}
setTouchListener(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
if (dX == 0) {
//This only works if the item is moving
viewHolder.itemView.animate().alpha(1f);
optionsState = OptionState.NONE;
}
if (!isRightSwipeMaxed(dX)) {
viewHolder.itemView.setTranslationX(dX);
} else {
viewHolder.itemView.setTranslationX(MAX_RIGHT_SWIPE_DX);
//This only works if the item is moving
viewHolder.itemView.animate().alpha(0);
}
//Doesn't do anything
viewHolder.itemView.invalidate();
}
最佳答案
我遇到了同样的问题,itemView 上的 invalidate() 没有执行任何操作。 您必须在父 recyclerView 上执行 invalidate() 才能正常工作:
viewHolder.animatedRecyclerView.invalidate()
关于java - OnDraw() 动画仅在项目移动时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47970408/