В вертикальном ListView, который также нужно выполнять перетаскивание в горизонтальном направлении, я слушаю события ACTION_MOVE, ища соответствующий deltaX. Он работает правильно, если ListView также не начнет прокручивать по вертикали. Как только он начинает делать это, он потребляет события перемещения, и мой обработчик перетаскивания не получает шанса.Поделитесь событиями касания в ListView
requestDisallowInterceptTouchEvent()
не является решением по двум причинам. Во-первых, я не хочу отключать прокрутку, я просто хочу поделиться событиями перемещения, так что и обработчики могут их видеть. Во-вторых, я даже не дотянулся до этого, потому что прокрутка уже потребляет события до того, как она достигнет моего горизонтального порога для действия.
Есть ли жизнеспособное решение, не превышающее переопределение и переписывание перехватчика событий ListView?
public boolean onTouch(View view, MotionEvent event) {
switch (MotionEventCompat.getActionMasked(event)) {
...
case MotionEvent.ACTION_MOVE:
if (!isDragging) {
float deltaX = Math.abs(downX - event.getX());
if (deltaX > touchSlop) {
isDragging = true;
view.startDrag(...);
}
}
return true;
}
return false;
}
});
Bog стандарт. Он работает, когда пользователь перемещается горизонтально, появляются ACTION_MOVE, перетаскивание начинается, когда это необходимо. Это происходит не тогда, когда пользователь также перемещается по вертикали, даже если это немного, потому что ListView перехватывает все ACTION_MOVE во время прокрутки, и я никогда не получаю deltaX достаточно большой, чтобы начать фактическую операцию перетаскивания.
, так что вы хотите перетащить n drop _while_, список прокрутки? – kiruwka
Да. Я хочу начать перетаскивание, если deltaX достаточно велик, независимо от того, есть или нет вертикальная прокрутка в одно и то же время. Чтобы визуализировать, представьте, что список содержит небольшие изображения. Я хочу, чтобы его можно было перетащить в центр экрана. И я хочу, чтобы это можно было сделать, даже если изображение, с которого начинается пользователь, не смежно с центром экрана, но выше или ниже, поэтому движение движения от изображения к центру экрана также будет иметь вертикальный компонент. –
Почему вы не вызываете [startDrag] (http://developer.android.com/reference/android/view/View.html#startDrag), когда вы решите начать перетаскивание, как описано в [учебнике по android] (http : //developer.android.com/guide/topics/ui/drag-drop.html) – kiruwka