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

时间:2017-12-25 16:36:37

标签: java android animation android-recyclerview ondraw

我想将动画添加到itemView,但是只有当项目正在移动时才会运行。例如,项目开始fadeOut直到alpha为0,但如果项目停止移动,则动画暂停并且项目仅在中途淡出。之后,该项目需要再次开始移动才能完成动画。

我知道onDraw通常只会在某些内容发生变化时被调用,但我想操作系统并没有意识到视图的样式也会发生变化,所以它并没有调用它。 / p>

我尝试在最后添加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();
}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,itemView上的invalidate()什么也没做。 您必须在父recyclerView上执行invalidate()才能起作用:

Member member = e.getMember();
Guild guild = member.getGuild();

for (Role role : guild.getRoles()) {
    System.out.println("getting em!");
    System.out.println(role.getId());
    if (role.getId().equals("496415978603675658")) {
        System.out.println("he has it, boss");
        guild.getController().removeSingleRoleFromMember(member, role)
                    .complete();
        guild.getController().addSingleRoleToMember(member, jda.getRoleById("496415995569766410"))
                    .complete();
    }
}