Размах жестов дизайн материала - PullRequest
0 голосов
/ 11 марта 2019

Я читаю Карточки - Материал дизайна . Я хотел бы реализовать жест смахивания в моем макете, но с этим я столкнулся с некоторыми проблемами.

Это эффект, который я хочу получить.

Проблема с моей текущей реализацией с ItemTouchHelper заключается в том, что элемент всегда полностью удаляется из макета, я не хочу, чтобы это произошло, так как в приведенном выше видео я хотел бы разрешить перетаскивание макета к прямому максимум 30% от всей ширины экрана, если пользователь уронит его перед ним, я бы хотел, чтобы он сделал резервную копию, чтобы макет вернулся в положение по умолчанию (без частичного перемещения в сторону), и если пользователь достигает 30% экрана, чтобы выполнить действие (например, сохранить элемент для просмотра позже) и вернуть элемент в исходное положение 0%. WhatsApp делает что-то очень похожее на то, что я хочу, когда вы проводите прямо по сообщению, вы можете переделать сообщение.

Это мой код

    public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback {
    private RecyclerItemTouchHelperListener listener;
    RecyclerView recyclerView;

    public RecyclerItemTouchHelper(int dragDirs, int swipeDirs, RecyclerItemTouchHelperListener listener, RecyclerView recyclerView) {
        super(dragDirs, swipeDirs);
        this.listener = listener;
        this.recyclerView = recyclerView;
    }

    @Override
    public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
        Log.i("waeaweaweaeawe", "onMove");
        return true;
    }

    @Override
    public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
        Log.i("waeaweaweaeawe", "onSelectedChanged");
        if (viewHolder != null) {
            final View foregroundView = ((clv_exibirPosts.ViewHolder) viewHolder).container_post;

            getDefaultUIUtil().onSelected(foregroundView);
        }
    }

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

    }

    @Override
    public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        Log.i("waeaweaweaeawe", "clearView");
        final View foregroundView = ((clv_exibirPosts.ViewHolder) viewHolder).container_post;
        getDefaultUIUtil().clearView(foregroundView);
    }

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





    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        Log.i("waeaweaweaeawe", "onSwiped");

    }

    @Override
    public int convertToAbsoluteDirection(int flags, int layoutDirection) {
        Log.i("waeaweaweaeawe", "convertToAbsoluteDirection");
        return super.convertToAbsoluteDirection(flags, layoutDirection);
    }

    public interface RecyclerItemTouchHelperListener {
        void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position);
    }
}

Я понятия не имею, как установить максимальное расстояние, на которое можно перетаскивать жест смахивания. Я нашел это в stackOverflow, это дает мне возможность заставить макет не полностью выйти из экрана

super.onChildDraw(c, recyclerView, viewHolder, dX / 2, dY, actionState, isCurrentlyActive);

Но здесь есть несколько проблем.

1 - медленная скорость пролистывания.

2 - Когда проведено до 50% всей ширины, разрешенной для перемещения, объект продолжает с измененной позицией, сохраняя его в максимально допустимом положении (я хочу, чтобы элемент всегда возвращался к 0% после достижения 50% проведенного сканирования допускается.)

Я просмотрел весь интернет и не нашел примеров, которые бы говорили об этом. Я уверен, что эта проблема не только моя. Если вы можете дать мне некоторые подсказки, примеры кодов, сообщения, что-нибудь, что может помочь, я уже буду чрезвычайно благодарен!

1 Ответ

0 голосов
/ 11 марта 2019

Я думаю, что эта библиотека - то, что вам нужно https://github.com/yanzhenjie/SwipeRecyclerView

Если вы хотите реализовать ее самостоятельно , иметь внешний вид по коду самой библиотеки .

...