2015-02-02 2 views
0

Я пишу тест, варианты которого расположены в кнопках. У меня есть переключатель для кнопок, который отображает нормальное и нажатое состояние, и все отлично работает. Что я хочу, так это то, что когда пользователь прикасается к опции и переходит к следующей опции, следующая кнопка получает фокус и выбирает. И когда пользователь берет руку, выполните щелчок выбранной кнопки.Выбрать другие кнопки при касании Переместить

user touch one of options user moves to next option

В изображениях выше вы можете увидеть именно то, что я имею в виду.

ответ

0

Вам нужно написать управление событиями пользовательских сенсорного, который будет запускать setPressed(true) на MotionEvent.ACTION_DOWNИЛИMotionEvent.ACTION_MOVE (реализация по умолчанию ожидает, чтобы всегда получать MotionEvent.ACTION_DOWN).

код, как это должно работать (добавить его ко всем кнопкам):

button.setOnTouchListener(new OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
      case MotionEvent.ACTION_MOVE: 
       if (!v.isPressed()) { 
        v.setPressed(true); 
       } 
       return true; 
      case MotionEvent.ACTION_UP: 
       // perform action ON CLICK 
       break; 
     } 

     v.setPressed(false); 
     return false; 
    } 
}); 
+0

это решение не работает, потому что, когда касание движется, это только для кнопки, которые пользователь запускает оттуда и другие кнопки не будут ответ на него. –

+0

вы даже попробовали? Важная часть состоит в том, что, когда палец пересекает границу зоны касания кнопки, на эту кнопку следует вызывать 'MotionEvent.Action_CANCEL', а затем в примере, который я предоставил на слушателе Touch, вернется ** false **. Благодаря этому управление событиями Touch будет передано другим компонентам. –

+0

да, я попробовал. проблема в том, что MotionEvent.Action_CANCEL не вызывался при касании левой кнопкой. на самом деле отменить никогда не звонил, я зарегистрировал его, и я не знаю, почему. –

Смежные вопросы