Android: использование onTouchEvent с настраиваемым представлением в настраиваемой группе просмотра - PullRequest
1 голос
/ 17 ноября 2011

У меня есть пользовательское представление, которое я называю «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 Ответ

7 голосов
/ 17 ноября 2011

Из документации SDK :

onTouch () - возвращает логическое значение, указывающее, использует ли ваш слушатель это событие. Важно то, что это событие может иметь несколько действий, которые следуют друг за другом. Таким образом, если вы возвращаете false при получении события действия вниз, вы указываете, что вы не использовали событие и также не заинтересованы в последующих действиях из этого события. Таким образом, вас не будут призывать к каким-либо другим действиям внутри события, таким как жест пальцем или событие возможного повышения.

Вам необходимо возвращать true, когда событие ACTION_DOWN инициируется, чтобы указать, что вы заинтересованы в последующих вызовах, относящихся к тому же событию.

НТН

...