Подтвердить что ты не робот

Как использовать View.OnTouchListener вместо onClick

Я разрабатываю приложение для Android 2.2.2 для клиента, и он хочет сделать следующее:

Теперь у меня есть кнопка с событием onClick, но он не нравится, он хочет отреагировать, когда пользователь отпустит кнопку.

Я нашел View.OnTouchListener, который, я думаю, это то, что мне нужно использовать, но есть ли возможность добавить это событие в xml, как я сделал с OnClick?

<ImageButton
    android:id="@+id/btnSaveNewGate"
    android:layout_width="@dimen/btnSaveNewGate_width"
    android:layout_height="@dimen/btnSaveNewGate_height"
    android:layout_below="@+id/radioGrGateType"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="@dimen/btnSaveNewGate_marginTop"
    android:background="@null"
    android:contentDescription="@string/layout_empty"
    android:onClick="onSaveNewGateClick"
    android:scaleType="fitXY"
    android:src="@drawable/save_gate_selector" />

У меня есть еще два вопроса:

Какое событие ассоциировано, когда пользователь отпускает свой палец?

Есть ли какие-либо рекомендации, запрещающие использование View.OnTouchListener вместо onClick?

4b9b3361

Ответ 1

Событие, когда пользователь отпускает палец, MotionEvent.ACTION_UP. Я не знаю, есть ли какие-либо рекомендации, запрещающие использование View.OnTouchListener вместо onClick(), скорее всего, это зависит от ситуации.

Вот пример кода:

imageButton.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP){

            // Do what you want
            return true;
        }
        return false;
    }
});

Ответ 2

Предположительно, если вы хотите использовать OnTouchListener, а не OnClickListener, тогда необходимы дополнительные функции OnTouchListener. Это дополнительный ответ, чтобы показать более подробную информацию о том, как можно использовать OnTouchListener.

Определить слушателя

Поместите это где-нибудь в свою деятельность или фрагмент.

private View.OnTouchListener handleTouch = new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        int x = (int) event.getX();
        int y = (int) event.getY();

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Log.i("TAG", "touched down");
                break;
            case MotionEvent.ACTION_MOVE:
                Log.i("TAG", "moving: (" + x + ", " + y + ")");
                break;
            case MotionEvent.ACTION_UP:
                Log.i("TAG", "touched up");
                break;
        }

        return true;
    }
};

Установить прослушиватель

Установите слушателя в onCreate (для Activity) или onCreateView (для фрагмента).

myView.setOnTouchListener(handleTouch);

Примечания

  • getX и getY дают вам координаты относительно вида (то есть левый верхний угол представления). Они будут отрицательными при перемещении вверх или слева от вашего вида. Используйте getRawX и getRawY, если вы хотите абсолютные координаты экрана.
  • Вы можете использовать значения x и y для определения таких вещей, как направление прокрутки.

Ответ 3

OnClick запускается, когда пользователь отпускает кнопку. Но если вы все еще хотите использовать TouchListener, вам нужно добавить его в код. Это просто:

myView.setOnTouchListener(new View.OnTouchListener()
{
    // Implementation;
});

Ответ 4

для использования образца сенсорного прослушивателя просто вам нужен этот код

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {

    ClipData data = ClipData.newPlainText("", "");
    View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
    view.startDrag(data, shadowBuilder, null, 0);

    return true;
}