解決google在scroll裡左右拖動的問題

来源:互联网 发布:sql数组 编辑:程序博客网 时间:2024/05/18 01:05

在scroll裡使用google map後,發現地圖的拖拉事件有衝突問題,google一下,發現了以下解決方法

从技术上讲,将地图视图滚动型布局容器内可以使地图变得难以滚动。
这是因为滚动布局容器将拦截到触摸事件,以便在地图上就失去了触摸事件,使得难以滚动或平移。
无论是在Android地图V2或以前的版本都會发生这种情况。

在这种情况下,解决方法是创建一个自定义SupportMapFragment类,因此我们可以覆盖其触摸事件。

public class WorkaroundMapFragment extends SupportMapFragment {    private OnTouchListener mListener;    @Override    public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle savedInstance) {        View layout = super.onCreateView(layoutInflater, viewGroup, savedInstance);        TouchableWrapper frameLayout = new TouchableWrapper(getActivity());        frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent));        ((ViewGroup) layout).addView(frameLayout,                new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));        return layout;    }    public void setListener(OnTouchListener listener) {        mListener = listener;    }    public interface OnTouchListener {        public abstract void onTouch();    }    public class TouchableWrapper extends FrameLayout {      public TouchableWrapper(Context context) {        super(context);      }      @Override      public boolean dispatchTouchEvent(MotionEvent event) {        switch (event.getAction()) {          case MotionEvent.ACTION_DOWN:              mListener.onTouch();                break;          case MotionEvent.ACTION_UP:              mListener.onTouch();                break;        }        return super.dispatchTouchEvent(event);      }    }}

在这个类中,我们通过使用扩展的FrameLayout TouchableWrapper类拦截触摸事件。还有一个自定义侦听OnTouchListener调度触摸事件来处理该地图主activityMyMapActivity。当触摸事件发生,dispatchTouchEvent将被调用,听者mListener将会处理它。

xml

<?xml version="1.0" encoding="UTF-8"?><ScrollView    xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/sv_container"    android:layout_width="match_parent"    android:layout_height="match_parent">    <!-- other child views //-->     <fragment        android:tag="fragment_map"       android:id="@+id/fragment_map"       android:layout_width="match_parent"       android:layout_height="175dp"       android:layout_marginTop="@dimen/activity_horizontal_margin"       class="net.londatiga.android.ui.fragment.WorkaroundMapFragment"/></ScrollView>

使用

public class MyMapActivty extends MapActivity {    private ScrollView mScrollView;    private GoogleMap mMap;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.fragment_my_map);        mMap = ((WorkaroundMapFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_map)).getMap();        mScrollView = (ScrollView) findViewById(R.id.sv_container);       ((WorkaroundMapFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_map)).setListener(new WorkaroundMapFragment.OnTouchListener() {          @Override          public void onTouch() {              mScrollView.requestDisallowInterceptTouchEvent(true);          }     });   }}
0 0
原创粉丝点击