Не отображается MotionEvent.ACTION_UP или MotionEvent.ACTION_CANCEL

Я пишу приложение для Android, которое должно реагировать на сенсорные события. Я хочу, чтобы мое приложение изменило цвет элемента списка на собственный цвет. Я написал следующий код, но только MotionEvent.ACTION_DOWN раздел работает. LogCat показывает, что ACTION_CANCEL а также ACTION_UP не называются вообще. Не могли бы вы помочь мне понять, почему мой код не работает.

Это мой код...

view.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            view.setBackgroundColor(Color.rgb(1, 1, 1));
            Log.d("onTouch", "MotionEvent.ACTION_UP" );
        }
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            view.setBackgroundColor(Color.rgb(23, 128, 0));
            Log.d("onTouch", "MotionEvent.ACTION_DOWN" );
        }
        if (event.getAction() == MotionEvent.ACTION_CANCEL) {
            view.setBackgroundColor(Color.rgb(1, 1, 1));
            Log.d("onTouch", "MotionEvent.ACTION_CANCEL" );
        }
        return false;
    }
});

1 ответ

Решение

Если вы вернетесь false от onTouch метод, никакие дальнейшие события не доставляются слушателю. Вы должны вернуться true по крайней мере, в случае event.getAction() == MotionEvent.ACTION_DOWN,

Рефакторинг вашего кода, как указано ниже:

view.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
    view.setBackgroundColor(Color.rgb(1, 1, 1));
    Log.d("onTouch", "MotionEvent.ACTION_UP" );
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
    view.setBackgroundColor(Color.rgb(23, 128, 0));
    Log.d("onTouch", "MotionEvent.ACTION_DOWN" );
    return true;
}

if (event.getAction() == MotionEvent.ACTION_CANCEL) {
    view.setBackgroundColor(Color.rgb(1, 1, 1));
    Log.d("onTouch", "MotionEvent.ACTION_CANCEL" );
}
return false;
}
});
Другие вопросы по тегам