【问题标题】:Google map V2 and navigation drawer谷歌地图 V2 和导航抽屉
【发布时间】:2014-07-17 11:03:09
【问题描述】:

问题

我想在Navigate Drawer 中使用Google Map V2,但我无法禁用导航抽屉

并在触摸时将触摸处理程序提供给地图。我该怎么办???

注意

我以前也遇到过类似的问题...

我想在Navigate Drawer 中使用SeekBar,但它无法滚动SeekBar。

当时我可以直接使用onTouchListener() for SeekBar 来存档,但现在不能了。

【问题讨论】:

    标签: android touch google-maps-android-api-2 navigation-drawer


    【解决方案1】:

    解决方案

    所以,感谢this post,这是我的解决方案,我已经修改了一些代码来归档我的目标。

    步骤 1 :: 为 MySupportMapFragment 创建 TouchableWrapper

    第 2 步 :: 覆盖 dispatchTouchEvent() 并执行以下操作

    public  class TouchableWrapper extends FrameLayout {
    
        public TouchableWrapper(Context context) {
            super(context);
        }
    
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev) {
    
            ViewParent v;
            switch (ev.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    v = this.getParent();
                    v.requestDisallowInterceptTouchEvent(true);
                    break;
                case MotionEvent.ACTION_UP:
                    v = this.getParent();
                    v.requestDisallowInterceptTouchEvent(false);
                    break;
            }
            return super.dispatchTouchEvent(ev);
        }
    }
    

    STEP 3 :: 创建 MySupportMapFragment 类并将其与 TouchableWrapper 绑定

    public class MySupportMapFragment extends SupportMapFragment {
        public View mOriginalContentView;
        public TouchableWrapper mTouchView;
    
        @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;
        }
    
    }
    

    第 4 步 :: 将您的原始 xml 地图片段更改为您的自定义片段

    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapFragment"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_below="@+id/buttonBar"
        class="com.myFactory.myApp.MySupportMapFragment"
        />
    

    是的,这就是Google Map V2 可以拖入Navigating Drawer 的全部内容

    【讨论】:

      【解决方案2】:

      希望this 是您之前实施的解决方案

      seekbar.setOnTouchListener(new ListView.OnTouchListener() 
      {
          @Override
          public boolean onTouch(View v, MotionEvent event) 
          {
              int action = event.getAction();
              switch (action) 
              {
              case MotionEvent.ACTION_DOWN:
                  // Disallow Drawer to intercept touch events.
                  v.getParent().requestDisallowInterceptTouchEvent(true);
                  break;
      
              case MotionEvent.ACTION_UP:
                  // Allow Drawer to intercept touch events.
                  v.getParent().requestDisallowInterceptTouchEvent(false);
                  break;
              }
      
              // Handle seekbar touch events.
              v.onTouchEvent(event);
              return true;
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2016-02-18
        • 2014-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多