Android: использование onTouchEvent с настраиваемым представлением в настраиваемой группе просмотра
У меня есть пользовательское представление, которое я называю "Node", которое является дочерним элементом пользовательской группы ViewGroup, называемой "NodeGrid". Класс NodeGrid более конкретно расширяет RelativeLayout.
У меня есть следующий фрагмент кода в моем классе пользовательского представления ("Узел"):
private boolean isBeingDragged = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
isBeingDragged = true;
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
isBeingDragged = false;
}
else if (event.getAction() == MotionEvent.ACTION_MOVE)
{
if (isBeingDragged)
{
float xPosition = event.getX();
float yPosition = event.getY();
//change the x and y position here
}
}
return false;
}
Эта проблема:
После установки точек останова в этом коде создается впечатление, что onTouchEvent вызывается только для случая MotionEvent.ACTION_DOWN, но не для любого из двух других случаев ("действие вверх" или "действие двигаться"). Кто-нибудь знает что-нибудь из рук, что может быть причиной этого?
Также (может быть связано):
Имеет ли значение, как представление добавляется в ViewGroup? Я заметил, что в дополнение к "addView" есть другие методы для добавления детей в ViewGroup, такие как "addFocusables" и "addTouchables". Прямо сейчас я просто добавляю дочерний вид в ViewGroup, используя "addView".
1 ответ
Из документации SDK:
onTouch () - возвращает логическое значение, указывающее, использует ли ваш слушатель это событие. Важно, что это событие может иметь несколько действий, которые следуют друг за другом. Таким образом, если вы возвращаете false при получении события действия вниз, вы указываете, что вы не использовали событие и также не заинтересованы в последующих действиях из этого события. Таким образом, вас не будут призывать к каким-либо другим действиям внутри события, таким как жест пальцем или событие возможного действия вверх.
Вам нужно возвращать true, когда событие ACTION_DOWN инициируется, чтобы указать, что вы заинтересованы в последующих вызовах, относящихся к тому же событию.
НТН