Android-如何让两个视图接收并执行相同的触摸事件?

Android-如何让两个视图接收并执行相同的触摸事件?,android,events,views,touch,touch-event,Android,Events,Views,Touch,Touch Event,我有一个类似这样的相对论: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#65ffffff" > <c

我有一个类似这样的相对论:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#65ffffff" >

<com.sonyericsson.zoom.ImageZoomView
    android:id="@+id/zoomview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />


</RelativeLayout>

我为那个相亲的年轻人安排了一系列的接触活动。但是,com.sonyericsson.zoom.ImageZoomView也有自己的逻辑来处理触摸事件

当我在屏幕上执行任何触摸事件时,首先调用com.sonyericsson.zoom.ImageZoomView类的触摸侦听器(这是我所期望的)。问题是,如果我在该触摸事件中返回“true”,则RelativeLayout的触摸侦听器不会被调用。然而,如果我返回“false”,它们将被调用,但是随后,ImageZoomView类所做的触摸处理就不会发生了!(我猜是因为我最后返回了“false”,所以Android会忽略类com.sonyericsson.zoom.ImageZoomView的touch事件之前进行的任何UI更新)

简而言之,我希望能够在com.sonyericsson.zoom.ImageZoomView和RelativeLayout中处理相同的触摸事件

有办法吗

我使用的是安卓2.2+


提前谢谢你

ImageZoomView
类继承

此继承类具有对RelativeLayout的引用

覆盖触摸处理方法并输入以下伪代码:

bool result = super.onTouch();
referencedRelativeLayout.onTouch();
return result;

这样两个小部件都可以获得事件

如果说您的
ImageZoomView
类扩展了
视图
,那么在您的主要活动中,您可以执行以下操作:

ImageZoomView mView;    

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);       

    mView = (ImageZoomView) findViewById(R.id.zoomview);         
    mView.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

        //Do whatever
        return false;
    });        

}
只需将
ImageZoomView
视为一个按钮(从视图扩展而来)


希望能有所帮助。

我建议您将ImageZoomView的OnTouchListener中的逻辑移动到dispatchTouchEvent方法


在我之前遇到的问题中,我发现dispatchTouchEvent/dispatchKeyEvent通常在onTouchListener/onKeyListener未按预期工作时工作。

我最终使用了onInterceptTouchEvent方法,如下所示:

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {

        return onTouchEvent(ev);
}
我必须实现onTouchEvent返回“false”的方法:


这样我就可以在事件发送给孩子们之前截获它们。所以,在那之前我做了我想要的反处理。

谢谢您的回复。但这就是问题所在,如果我在那里返回false,事件将被传递到下一个视图,好的(这就是我想要的)。然而,由于某种原因,Android忽略了在“returnfalse;”(在onTouch方法中)之前进行的所有处理!也就是说,只处理下一个视图(在我的例子中是RelativeLayout)的处理。我不想忽略ImageZoomView的处理!!我唯一能让它不被忽视的方法就是返回true而不是false。但是,在这种情况下,事件将不会传递到下一个视图(RelativeLayout)。。。
@Override
public boolean onTouchEvent(MotionEvent event) {

      gesturedetector.onTouchEvent(event);      
   return false;
}