首页>Program>source

默认情况下,GoogleMap不提供地图拖动开始和拖动停止的事件.我已经报告了该问题 这里

我想做 custom handler 将使用普通的 onTouch 活动并将其与 setOnCameraChangeListener结合

但是我找不到如何访问 onTouch的方法 GoogleMap事件 目的.它没有提供这种 callback

我想知道如何在 Google Map API v2中处理地图的onTouch事件

最新回答
  • 2021-1-11
    1 #

    以下是确定拖动开始和结束事件的一种可能的解决方法:

    您必须扩展 SupportMapFragmentMapFragment .在 onCreateView() 你必须包裹你的 MapView 在定制的 FrameLayout中 (在下面的示例中是 TouchableWrapper类 ),您可以在其中拦截触摸事件并识别是否点击了地图.如果你的 onCameraChange 被调用,只需检查是否按下了地图视图(在下面的示例中,这是变量 mMapIsTouched )。

    示例代码:

    更新1:

      return original created view in getView()

      使用 dispatchTouchEvent() 代替 onInterceptTouchEvent()

      自定义FrameLayout:

      private class TouchableWrapper extends FrameLayout {
          @Override
          public boolean dispatchTouchEvent(MotionEvent ev) {
          switch (ev.getAction()) {
              case MotionEvent.ACTION_DOWN:
              mMapIsTouched = true;
              break;
          case MotionEvent.ACTION_UP:
              mMapIsTouched = false;
              break;
              }
              return super.dispatchTouchEvent(ev);
          }
          }
      

      在您自定义的MapFragment中:

      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
          mOriginalContentView = super.onCreateView(inflater, parent, savedInstanceState);
          mTouchView = new TouchableWrapper(getActivity());
          mTouchView.addView(mOriginalContentView);
          return mTouchView;
      }
      @Override
      public View getView() {
          return mOriginalContentView;
      }
      

      在您的相机更改回调方法中:

      private final OnCameraChangeListener mOnCameraChangeListener = new OnCameraChangeListener() {
          @Override
          public void onCameraChange(CameraPosition cameraPosition) {
              if (!mMapIsTouched) {
                  refreshClustering(false);
              }
          }
      };
      

  • 2021-1-11
    2 #

    有一种更简单的方法可以在 onCameraMoveStarted上处理案件 这样的听众

    下面的代码段

    @Override
    public void onCameraMoveStarted(int reason) {
        if (reason == OnCameraMoveStartedListener.REASON_GESTURE) {
            Toast.makeText(this, "The user gestured on the map.",
                           Toast.LENGTH_SHORT).show();
        } else if (reason == OnCameraMoveStartedListener
                                .REASON_API_ANIMATION) {
            Toast.makeText(this, "The user tapped something on the map.",
                           Toast.LENGTH_SHORT).show();
        } else if (reason == OnCameraMoveStartedListener
                                .REASON_DEVELOPER_ANIMATION) {
            Toast.makeText(this, "The app moved the camera.",
                           Toast.LENGTH_SHORT).show();
        }
    }
    

  • php创建zip文件,但不包含zip文件中的文件的路径
  • php:UTF-8编码的html页面显示-(问号)而不是字符