3

ユーザーがスワイプしたときに、CardView の下にユーザー メニューを表示したい。しかし、スワイプ中にcardViewを途中で停止させたい。

MyItemTocuchHelper クラスを作成し、 onChildDraw() メソッドをオーバーライドしました。

  public class MyItemTocuchHelper extends ItemTouchHelper.SimpleCallback {

        .....

        private int mWidth = 128; // this value is calculated, but let's say its 128

...
 @Override
    public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {

        if (dX > mWidth) {
            dX = mWidth;
        }

        super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
    }
    }
@Override
    public float getSwipeThreshold(RecyclerView.ViewHolder viewHolder) {
        return 0.01f;
    }

これが行うことは、スワイプアニメーションが特定のポイントで停止することです(これをやりたかったのです)。ただし、このビューをスワイプすると、スワイプ距離が自動的に画面幅に設定されます。つまり、スワイプして戻そうとすると、最初は dX = 1038.0 で onChildDraw() メソッドが呼び出され、スワイプを続けるとその値が減少します。したがって、dX が mWidth の値に達する前に、アニメーションは再生されません。dX; の値が mWidth の値まで減少する限り、アニメーションは再び開始されます。

たとえばswipedDXを特定の値に設定する方法はありますか? またはそれを回避する方法はありますか?私が望むのは、ユーザーがビューをスワイプし始めるとすぐにアニメーションを開始することです。

前もって感謝します

4

0 に答える 0