Отслеживание MotionEvent в ViewGroup - PullRequest
1 голос
/ 17 июля 2011

У меня есть класс extends ViewGroup, и я хочу получить от него все MotionEvent. Пока у меня есть это:

class TestViewGroup extends ViewGroup {
     public TestViewGroup(Context context) {
         super(context);
     }

     @Override
     public boolean onTouchEvent(MotionEvent event) {
         Log.d("TestViewGroup", "X: " + (int)event.getX() + " Y: " + (int)event.getY());
         return true;
     }
 }

Метод onTouchEvent(MotionEvent event) позволяет захватывать MotionEvent каждый раз, когда я кладу палец на экран. Но если я проведу пальцем по экрану, пока мой палец еще опущен, он не будет продолжать отслеживать координаты моего пальца. Я знаю, что в классе, который расширяет View, можно продолжать отслеживать палец, когда он проходит через View. Мне просто интересно, как можно применить ту же идею к ViewGroup.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2014

Вы должны добавить viewGroup.setClickable(true);, чтобы убедиться, что представление может получить больше результатов.

0 голосов
/ 17 июля 2011

Я реализовал очень простой класс ViewGroup и скопировал ваш код, onTouchEvent отлично работал

Единственное, что я сделал по-другому, это реализовал все конструкторы, хотя в целом я бы также назвал super для onTochEventкласс, который, кажется, не имеет значения.

Так что мне интересно, есть ли какой-нибудь код / ​​xml, который вы пропускаете, который может иметь значение?

Захватывает все события касания в эмуляторе ина устройстве, почти как у вас, за исключением конструкторов.

public class customViewGroup extends ViewGroup {

    public customViewGroup(Context context) {
        super(context,null,0);
   }

    public customViewGroup(Context context, AttributeSet attrs) {
        super(context, attrs,0);

    }

    public customViewGroup(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {

    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.d("bThere", "X: " + (int)event.getX() + " Y: " + (int)event.getY());
        return true;//super.onTouchEvent(event);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...