我有一个看起来像这样的RelativeLayout:
<?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>
我为RelativeLayout设置了一堆触摸事件。但是,com.sonyericsson.zoom.ImageZoomView也有自己的逻辑来处理触摸事件。
当我在屏幕上执行任何触摸事件时,首先调用com.sonyericsson.zoom.ImageZoomView类的触摸侦听器(这是我所期望的)。问题是,如果我在触摸事件中返回“true”,则RelativeLayout 的触摸侦听器不会被调用。然而,如果我返回“false”,它们会被调用,但是然后,ImageZoomView类的触摸处理根本不会发生! (我想是因为我最后返回了“false”,所以Android只是忽略了com.sonyericsson.zoom.ImageZoomView类之前的触摸事件所做的任何UI更新。)
简而言之,我希望能够在我的com.sonyericsson.zoom.ImageZoomView和我的RelativeLayout中处理相同的触摸事件。
有没有办法做到这一点?
我使用的是Android 2.2 +。
提前谢谢!
答案 0 :(得分:1)
我建议您将ImageZoomView的 OnTouchListener 中的逻辑移动到 dispatchTouchEvent 方法。
在我之前遇到的问题中,我发现dispatchTouchEvent / dispatchKeyEvent通常在onTouchListener / onKeyListener不能按预期工作时有效。
答案 1 :(得分:0)
从ImageZoomView
类继承。
此继承的类具有对RelativeLayout的引用。
覆盖触摸处理方法并将以下伪代码放入:
bool result = super.onTouch();
referencedRelativeLayout.onTouch();
return result;
这样两个小部件都能得到这个事件。
答案 2 :(得分:0)
请注意,您的ImageZoomView
课程延长View
,您可以在主要活动中执行以下操作:
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
视为按钮(从View扩展)即可。
希望有所帮助。
答案 3 :(得分:0)
我最终使用方法 onInterceptTouchEvent ,如下所示:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return onTouchEvent(ev);
}
我必须实现方法 onTouchEvent 才能返回“false”:
@Override
public boolean onTouchEvent(MotionEvent event) {
gesturedetector.onTouchEvent(event);
return false;
}
这样我就可以在发送给孩子们之前拦截这些事件。所以,在那之前我做了我想要的处理。