Обработка событий UI в Android

Я пытаюсь изменить некоторый код, который я нашел онлайн к моим потребностям. Это, как предполагается, ловит MotionEvent (бросок в особенности) и запускает отдельное действие. Я плохо знаком с Java, таким образом, я испытываю некоторые затруднения при понимании кода. Вот то, что я имею до сих пор:

public class Hypertension extends Activity {
 private GestureDetector flingDetector;
 View.OnTouchListener gestureListener;
 private TextView redView;
 private TextView greenView;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        redView = (TextView)findViewById(R.id.buttonRed);
        greenView = (TextView)findViewById(R.id.buttonGreen);

        redView.setOnTouchListener(gestureListener);
        greenView.setOnTouchListener(gestureListener);

        flingDetector = new GestureDetector(new MyFlingListener());
        gestureListener = new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if (flingDetector.onTouchEvent(event)) {
                    //startActivity(new Intent(Hypertension.this, Green.class));
                 return true;
                }
                return false;
            }
        };
    }

    class MyFlingListener extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
          float velocityY) {
         // TODO Auto-generated method stub
         startActivity(new Intent(Hypertension.this, Green.class));
         return false;
        }
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (flingDetector.onTouchEvent(event))
         return true;
     else
      return false;
    }
}

Мое понимание - то, что, когда экран затронут, onTouchEvent называют. В вышеупомянутом коде этот метод переопределяется для вызова flingDetector, который прислушивается к броску. Если Вас слышат, это запускает действие.

На данный момент, однако, ничего не происходит, когда я выполняю бросок в эмуляторе. Кроме того, я справедливо смущен относительно того, что на самом деле представляют возвращаемые значения различных булевых методов.

1
задан dfetter88 2 July 2010 в 17:57
поделиться

2 ответа

В вашем коде есть два метода onTouchEvent. Один находится в классе GestureDetector (не переопределен), а другой - в вашем классе активности Hypertension (который вы переопределили внизу).

Когда кто-то вызывает TouchEvent в основной активности, вы явно вызываете GestureDetector (передавая событие) здесь:

if (flingDetector.onTouchEvent(event)) return true;

Но если вы не переопределили метод onTouchEvent этого класса, то ничего не произойдет!


Цель переопределения этих методов "onSomething()" состоит в том, чтобы они вызывались автоматически при срабатывании события. В целом работать со слушателями можно следующим образом:

  1. Создайте подкласс класса Listener для события и переопределите его метод "onEvent()", чтобы сделать что-то, когда событие сработает
  2. Вызовите метод "setListener( Listener)" объекта, который вы хотите запустить указанные события, после его инициализации - передавая в него ранее созданный вами Listener
  3. Откиньтесь назад и смотрите :)
2
ответ дан 2 September 2019 в 23:20
поделиться

Для всех прослушивателей событий, которые возвращают логическое значение, он должен возвращать true при обработке события, поэтому в вашем примере, если flingDetector обрабатывает onTouchEvent, он возвращает true.

Этот вопрос задавался раньше, и на него есть несколько отличных ответов.

0
ответ дан 2 September 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: