2015-06-23 4 views
3

В настоящее время следующие является расположение моего приложения:Android-Touch обнаружение событий для обоих родителей и ребенка взглядов одновременно

 LinearLayout 
      ----Button 
       ----ScrollView 
        ----RelativeLayout 
        ----EditText 

Я создал одну прозрачную LinearLayout над всем этим, реализуемый OnTouchListener и внутри OnTouch(), возвращает false. Таким образом, все элементы управления перемещаются ниже дочерних элементов. Но в LinearLayout я не могу обрабатывать действия ACTION_MOVE, так как объект MotionEvent не используется этим макетом. Есть ли способ обнаружить все события касания как в родительском, так и в детском представлении?

ответ

1

Вы можете сделать это, переопределив dispatchTouchEvent в макете.

public class MyFrameLayout extends LinearLayout { 
    @Override 
    public boolean dispatchTouchEvent(MotionEvent e) { 
     // do what you need to with the event, and then... 
     return super.dispatchTouchEvent(e); 
    } 
} 

Затем использовать эту схему вместо обычного FrameLayout:

<com.example.android.MyFrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:padding="10dip" 
     android:id="@+id/rootview"> 

    ... 

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

Этот ответ основан на reference от Romain guy ответ.

+0

Я пробовал это, но все равно dispatchTouchEvent вызывается только для первого раза. После этого объект MotionEvent потребляется любым дочерним макетом, и он не вызывается снова. – codevscolor

+0

действительно хотите обработать событие как в родительском, так и в дочернем? – Kartheek

+0

Да..и нужно обрабатывать в обоих макетах. На самом деле я хочу, чтобы все события ACTION_MOVE, UP, DOWN извне. – codevscolor