我正在尝试使用手势检测器捕获双击事件。
我有一个叠加框架放在我的地图片段顶部,并实现ontouch和ongesture听众。问题是我似乎只能获得一层来捕获事件。如果我将onDown更改为返回true,则叠加会占用所有事件,并且地图不可用。如果我让它返回false,则地图也会使用双击事件,并在我不希望它执行时放大。
以下是叠加层的相关代码:
@Override
public boolean onDown(MotionEvent e) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return mDetector.onTouchEvent(event);
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
if(mEventListener != null){
mEventListener.onSelect();
}
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
public interface OnSelectListener{
void onSelect();
}
public void setEventListener(OnSelectListener mEventListener){
this.mEventListener = mEventListener;
}
以下是我的布局设置方式:
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.google.android.gms.maps.MapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/circle_options">
</fragment>
<com.derongan.ambiance.OverlayFrame
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/frame_layout">
答案 0 :(得分:0)
通过做两件事来解决问题:
首先,我需要覆盖onInterceptTouchEvent以及onTouchEvent。这样我的gesturedetector既可以输入初始(未捕获)事件,也可以输入后来捕获的事件。
此外,由于事件在android中传播的方式,因此将mapfragment包含在Frame下面的片段中是不够的。相反,需要将帧设置为片段的父节点,以便拦截和触摸事件能够正常工作。