2

スワイプして閉じることができるビューを作成しようとしていますが、元に戻すことができます。アイテムには、 内に背景と前景があり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 パラメータで呼び出されます。アイテムをタップすると、一瞬バックグラウンド ビューが表示され、その後、通常はフォアグラウンドを閉じることができます。どうすればこれを修正できますか?

4

1 に答える 1