【问题标题】:Yandex Mapview inside ScrollView not scrolling verticallyScrollView 内的 Yandex Mapview 不垂直滚动
【发布时间】:2017-11-13 10:45:56
【问题描述】:
mapview 只会横向滚动,就好像您尝试垂直滚动时,ScrollView 正在采取行动。我试过 requestDisallowInterceptTouchEvent(true);但它没有帮助。
PS。 Yandex MapView 扩展了 RelativeLayout
【问题讨论】:
标签:
android
dictionary
scrollview
android-mapview
【解决方案1】:
尝试使用 MapView onTouchEvent,如下所示
public boolean onTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
this.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
this.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
// Handle MapView's touch events.
super.onTouchEvent(ev);
return true;
}
requestDisallowInterceptTouchEvent 如果设置为 true,则可以滚动嵌套视图,如果为 false,则启用父 ScrollView 滚动。
对于 ListView,我们不需要这个事件监听器,只需 listview.setNestedScrollingEnabled(true);
mapview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
this.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
this.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
super.onTouchEvent(ev);
return true;
}
});
【解决方案2】:
您必须创建自定义 MapView。按照下面提供的代码 sn-p
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);
}
}