【问题标题】:Capture double tap from map fragment从地图片段中捕获双击
【发布时间】:2015-11-02 21:41:00
【问题描述】:

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

我有一个覆盖框架,它放置在我的地图片段顶部,并实现了 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">

【问题讨论】:

  • 你的意思是什么问题是我只能让地图响应触摸事件,或者覆盖。?
  • 抱歉,不清楚。让我快速修复它
  • onTouch 是这样实现的吗?
  • 不知何故,返回被切断了代码。它应该返回 mDetector.onTouchEvent 的结果
  • 试试这个方法if (mDetector.onTouchEvent(event)) { return true; } return super.onTouchEvent(event);

标签: android mapfragment


【解决方案1】:

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

首先,我需要重写 onInterceptTouchEvent 和 onTouchEvent。通过这种方式,我的手势检测器既可以接收初始(未捕获)事件,也可以接收后来捕获的事件。

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

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多