Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从地图片段捕获双击_Android_Mapfragment - Fatal编程技术网

Android 从地图片段捕获双击

Android 从地图片段捕获双击,android,mapfragment,Android,Mapfragment,我正在尝试使用手势检测器捕捉双击事件 我有一个覆盖框架,它放在地图片段的顶部,并实现ontouch和OnTesture侦听器。问题是我似乎只能得到一层来捕捉事件。如果我将onDown更改为返回true,则覆盖将消耗所有事件,并且映射不可用。如果我让它返回false,则贴图也会使用双击事件,并在我不希望它这样做时放大 以下是覆盖的相关代码: @Override public boolean onDown(MotionEvent e) { return false; } @Override

我正在尝试使用手势检测器捕捉双击事件

我有一个覆盖框架,它放在地图片段的顶部,并实现ontouch和OnTesture侦听器。问题是我似乎只能得到一层来捕捉事件。如果我将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">

通过做两件事解决了问题:

首先,我需要覆盖onInterceptTouchEvent和onTouchEvent。通过这种方式,我的手势检测器同时接收初始(未捕获)事件和随后捕获的事件


此外,由于android中事件的传播方式,仅将mapfragment包含在框架下方的片段中是不够的。取而代之的是,需要将帧制作成片段的父帧,以便截取和触摸事件能够正常工作。

通过执行两项操作解决了该问题:

首先,我需要覆盖onInterceptTouchEvent和onTouchEvent。通过这种方式,我的手势检测器同时接收初始(未捕获)事件和随后捕获的事件


此外,由于android中事件的传播方式,仅将mapfragment包含在框架下方的片段中是不够的。相反,需要将帧制作成片段的父帧,以便截取和触摸事件能够正常工作。

您所说的问题是,我只能让贴图响应触摸事件,或者覆盖。对不起,这还不清楚。让我来修复它,真正的fastis onTouch是这样实现的吗?不知怎的,返回被从代码中删掉了。它应该以这种方式返回mDetector.onTouchEventtry的结果
if(mDetector.onTouchEvent(event)){return true;}返回super.onTouchEvent(event)你所说的问题是我只能让地图对触摸事件做出响应,或者覆盖。对不起,这还不清楚。让我来修复它,真正的fastis onTouch是这样实现的吗?不知怎的,返回被从代码中删掉了。它应该以这种方式返回mDetector.onTouchEventtry的结果
if(mDetector.onTouchEvent(event)){return true;}返回super.onTouchEvent(event)