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;
}