java - OnDraw() 动画仅在项目移动时运行

标签 java android animation android-recyclerview ondraw

我想向 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/

相关文章:

java - 如何使用 Google Guava 为每个新 map 条目设置不同的过期超时时间?

java - Redis 对象序列化向后兼容性

java - Android ProgressDialog 未显示(被其他线程中的代码阻止)

android - 解码位图返回 null

java - Jbutton 在两种背景颜色之间闪烁

jquery - 如何延迟jquery动画?

jquery - CSS 动画 : Remove class with gently transition

java - 从 BufferedReader 读取时出现 NullPointerException,仅当作为 jar 运行时

java - 使用共享首选项保存 boolean 值数组

android - 如何禁用 WebView 中的垂直和水平滚动?