谷歌地图V2和导航抽屉

时间:2014-07-17 11:03:09

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

问题

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

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

注意

我之前遇到过类似的问题......

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

那时,我可以直接使用onTouchListener()为SeekBar存档,但现在却不能。

2 个答案:

答案 0 :(得分: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);
    }
}

第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

答案 1 :(得分:0)

希望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;
    }
});