Перенос сенсорного фокуса в другой вид - PullRequest
4 голосов
/ 18 июля 2011

Этот вопрос немного неловкий.Можно ли перенести сенсорный фокус одного вида в другой?По сути, скажем, что у вас есть представление, которое получает первое событие касания ACTION_DOWN, а затем сразу же хочет перенести фокус всех событий касания в другое представление для обработки с помощью onTouchEvent(MotionEvent event).Я думал, что если сделать следующее, это сработает, но это не так:

 @override
 public boolean onTouchEvent(MotionEvent) {
      this.clearFocus();
      anotherView.setFocusableInTouchMode(true);
      anotherView.requestFocus();
 }

Очевидно, мне кажется, что это просто не работает таким образом.Может ли кто-нибудь объяснить мне, как я могу делать что-то подобное?

Если мне все еще сложно понять мой вопрос, подумайте о обычной кнопке.При нажатии кнопка выделяется (фокусируется), и если вы убираете палец с кнопки, но при этом продолжаете удерживать палец на экране, кнопка становится не сфокусированной, но по-прежнему контролирует все события касания (никакой другой вид не может стать сфокусированным, даже есливы двигаетесь над ними).Мой вопрос спрашивает, можно ли перенести этот сенсорный фокус на другой вид для обработки без необходимости убирать палец с экрана.

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Попробуйте приведенный ниже код может работать

button1.setOnFocusChangeListener(new OnFocusChangeListener()
{           
    @Override
    public void onFocusChange(View arg0, boolean hasFocus)
    {
        if(hasFocus)                
            button2.requestFocus();             
    }
});
0 голосов
/ 30 июля 2012

Способ, которым я обошел это, заключался в том, чтобы иметь единый вид "жгут", единственной целью которого было передавать сенсорную информацию другим классам, которые затем выполняли бы обработку. Обратите внимание, что ViewA и B на самом деле не должны быть представлениями и расширять класс представления. Это не идеальное решение, но я не думаю, что можно решить эту проблему с помощью современной платформы Android (ICS / JB).

class ViewHarness extends View{

    public boolean onTouch(MotionEvent event){
    if(ViewA is selected)
        ViewA.onTouch(event);
    else
        ViewB.onTouch(event);
}
...