我正在尝试创建一个可以滑动以解除的视图,但它可以撤消。这些项目在FrameView
内有背景和前景。我在onChildDraw
中覆盖ItemTouchHelper.Callback
,如下所示:
@Override
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
float dX, float dY, int actionState, boolean isCurrentlyActive) {
if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
if (viewHolder instanceof ItemViewHolder) {
ItemViewHolder holder = (ItemViewHolder) viewHolder;
holder.foreground.setTranslationX(dX);
}
} else {
super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
}
一切正常,直到我尝试根据用户操作撤消滑动操作:
foreground.animate()
.translationX(0)
.setDuration(150);
确实将实际视图恢复到其位置,但如果用户再次尝试滑动该项,则会再次显示背景,并且由于某种原因调用onChildDraw时dX参数大于屏幕宽度。点击该项目会显示背景视图一秒钟,然后通常可以解除前景。我该如何解决这个问题?
答案 0 :(得分:1)
解决方案是使用getDefaultUIUtil()
的{{1}}函数。工作代码如下:
ItemTouchHelper.Callback