首頁>Program>source

預設情况下,GoogleMap不提供地圖拖動開始和拖動停止的事件.我已经報告了该問题 這裏

我想做 custom handler 將使用普通的 onTouch 活動並將其与 setOnCameraChangeListener結合

但是我找不到如何訪問 onTouch的方法 GoogleMap事件 目的.它没有提供這種 callback

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

最新回復
  • 5月前
    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);
              }
          }
      };
      

  • 5月前
    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頁面顯示-(問號)而不是字元