我想将动画添加到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();
}
答案 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();
}
}