RecyclerView Swipe с настроенной анимацией

ФОН

Есть несколько учебных пособий, объясняющих, как показать значок под RecyclerView.viewHolder когда это сильно ударил. Есть даже библиотека: https://github.com/chthai64/SwipeRevealLayout (см. 1)

То, что я пытаюсь сделать, немного по-другому, потому что я не хочу переводить полный RecyclerView.viewHolder и обнаружить что-то под этим. Вместо этого, что я хочу достичь, проводя элемент:

  1. Частично перевести (на половину экрана) TextView,
  2. Поверните вокруг своей оси Y ImageView поэтому он показывает другой значок на задней стороне.
  3. Подтвердите удаление элемента, нажав на недавно показанный ImageView обратная сторона.

Каждый предмет в моем RecyclerView состоит из ImageView и TextView (например, приложения WhatsApp или Google Mail).

Я уже выполнил пункты 1) и 2) со следующим кодом:

ItemTouchHelper.Callback _ithCallback = new ItemTouchHelper.Callback() {

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

        // If swiping, apply custom animation:
        //   1. Displace the textView to the right a little
        //   2. Rotate the Image view a 180 degrees
        if(actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
            // Put a limit on the swipe position
            final int MAX_SWIPE = 100;
            float sdX = (dX/4 > MAX_SWIPE ? MAX_SWIPE : dX/4);

            // Specify the child view to be swiped
            StepAdapter.ViewHolder vH = ((StepAdapter.ViewHolder)viewHolder);
            LinearLayout stepBox = vH.stepInfo;
            getDefaultUIUtil().onDraw(c, recyclerView, stepBox, sdX, dY, actionState, isCurrentlyActive);

            // Decrease transparency and turn red gradually
            int alpha = (int) sdX*(255/MAX_SWIPE);
            stepBox.setBackgroundColor(Color.argb(alpha,255,0,0));

            // Rotate the icon view (FlipImageView sets the onTouchListener)
            FlipImageView stepIcon = vH.icon;
            stepIcon.flipBy(dX/2);

        } else {
            // Use the default dragging-animation for non-customized actions
            super.onChildDraw(c,recyclerView,viewHolder,dX,dY,actionState,isCurrentlyActive);
        }
    }
}

Но 3) сводит меня с ума. Проблема в том, что при нажатии на ImageView, ItemTouchHelper интерпретирует это как пролистывание до положения X=0, а затем представление внезапно возвращается в исходное положение.

Я предполагаю, что touchEvent перехватывается одним из ImageView родители (ViewHolder, RecyclerView...) и никогда не доберется до ImageView onTouchListener.

ВОПРОС

При перемещении элемента на полпути без перемещения viewHolder Как я могу нажать на дочернюю кнопку, чтобы она (щелчок) не интерпретировалась как движение, чтобы вернуться в исходное положение?

Я пробовал с RecyclerView Методы onInterceptTouchEvent так и не смогли разобраться. Любая помощь будет очень ценится! Благодарю.

0 ответов

Другие вопросы по тегам