RecyclerView Swipe с настроенной анимацией
ФОН
Есть несколько учебных пособий, объясняющих, как показать значок под RecyclerView.viewHolder
когда это сильно ударил. Есть даже библиотека: https://github.com/chthai64/SwipeRevealLayout (см. 1)
То, что я пытаюсь сделать, немного по-другому, потому что я не хочу переводить полный RecyclerView.viewHolder
и обнаружить что-то под этим. Вместо этого, что я хочу достичь, проводя элемент:
- Частично перевести (на половину экрана)
TextView
, - Поверните вокруг своей оси Y
ImageView
поэтому он показывает другой значок на задней стороне. - Подтвердите удаление элемента, нажав на недавно показанный
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 так и не смогли разобраться. Любая помощь будет очень ценится! Благодарю.