我正在使用 osmdroid 和 osmdroid 奖励包来展示气球。在气球内部有一个滚动视图,其中包含一个线性布局(垂直)作为子级。
当我尝试向下滚动时,我的地图视图也会滚动。我怎样才能强制滚动动作只对我的气球?
我正在使用 osmdroid 和 osmdroid 奖励包来展示气球。在气球内部有一个滚动视图,其中包含一个线性布局(垂直)作为子级。
当我尝试向下滚动时,我的地图视图也会滚动。我怎样才能强制滚动动作只对我的气球?
好的,我找到了一个解决方案,也许它不是最好的解决方案,但它对我有用,就像我期望的那样
创建一个从 MapView 扩展的类并覆盖下一个方法:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
float x = ev.getRawX();
float y = ev.getRawY();
View view = findViewById(R.id.my_overlay_view);
if(view!=null){
boolean isInside = isPointInsideView(x, y, view);
if(isInside){
System.out.println("Touch in");
canMove = false;
}else{
int action = ev.getAction();
System.out.println(action);
switch (action) {
case MotionEvent.ACTION_MOVE:
moving=true;
break;
case MotionEvent.ACTION_UP:
if(!moving){
CustomDefaultInfoWindow window = (CustomDefaultInfoWindow)view.getTag();
window.close();
moving=false;
}
default:
break;
}
canMove = true;
}
}
return super.onInterceptTouchEvent(ev);
}
@Override
public void scrollTo(int arg0, int arg1) {
if(canMove){
super.scrollTo(arg0, arg1);
}
};
private boolean isPointInsideView(float x, float y, View view){
int location[] = new int[2];
view.getLocationOnScreen(location);
int viewX = location[0];
int viewY = location[1];
//point is inside view bounds
if(( x > viewX && x < (viewX + view.getWidth())) &&
( y > viewY && y < (viewY + view.getHeight()))){
return true;
} else {
return false;
}
}