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

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

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

Я нашел вид.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?

3 ответов


событие, когда пользователь отпускает палец -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;
    }
});

предположительно, если кто-то хочет использовать OnTouchListener, а не OnClickListener, то дополнительная функциональность это. Это дополнительный ответ, чтобы показать более подробную информацию о том, как 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 (для деятельности) или onCreateView (для a Фрагмент.)

myView.setOnTouchListener(handleTouch);

Примечания

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

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

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