onChildDraw导致项目闪烁

时间:2016-10-28 18:10:04

标签: android android-recyclerview itemtouchhelper

我正在尝试创建一个可以滑动以解除的视图,但它可以撤消。这些项目在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参数大于屏幕宽度。点击该项目会显示背景视图一秒钟,然后通常可以解除前景。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

解决方案是使用getDefaultUIUtil()的{​​{1}}函数。工作代码如下:

ItemTouchHelper.Callback