我有一个水平滚动视图,其中包含一个视图组层次结构,最后是一个谷歌地图。我的问题是HSV正在捕捉对地图意味着的左右拖动。我试过了
hsv.requestDisallowInterceptTouchEvent(true);
甚至
mapView.getParent().requestDisallowInterceptTouchEvent(true);
但无济于事。我有什么问题吗?或者你能提出另一种解决方案吗?
我认为这应该是我原来的问题:如何实施此处发布的解决方案Mapview inside a ScrollView。具体来说,我在哪里放置代码?
答案 0 :(得分:11)
看起来你是正确的,但你应该在每个触摸事件上调用requestDisallowInterceptTouchEvent(true)方法(参见docs)。试试this solution
更新:
试试这个:
final HorizontalScrollView hsv = ...
final MapView mapView = ...
mapView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
hsv.requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
hsv.requestDisallowInterceptTouchEvent(false);
break;
}
return mapView.onTouchEvent(event);
}
});
答案 1 :(得分:4)
对于Google地图v2,请按照解决方案this tutorial
进行操作答案 2 :(得分:1)
您必须创建自定义MapView。请按照下面提供的代码段进行操作
public class AppMapView extends MapView {
public AppMapView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_UP:
System.out.println("unlocked");
this.getParent().requestDisallowInterceptTouchEvent(false);
break;
case MotionEvent.ACTION_DOWN:
System.out.println("locked");
this.getParent().requestDisallowInterceptTouchEvent(true);
break;
}
return super.dispatchTouchEvent(ev);
}
}
在XML中,请遵循以下代码:
<com.tech.linez.brixlanepassenger.custom_views.AppMapView
android:id="@+id/map_ride_route"
android:layout_width="match_parent"
android:layout_height="220dp"
android:layout_margin="10dp"/>
答案 3 :(得分:-1)
尝试覆盖地图的onTouch并始终从中返回true。