您的位置:首页 > 编程语言 > Go语言

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

2015-06-01 18:15 369 查看
在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);
}
});
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  google地图 android