我正在使用osmdroid和osmdroid奖励包来展示气球。 在气球内部有一个scrollView,它包含一个linearlayout(垂直)作为孩子。
当我尝试向下滚动时,我的mapview也会滚动。 我怎么能只将滚动动作强制到我的气球?
答案 0 :(得分:2)
好的,我找到了一个解决方案,也许这不是最好的解决方案,但它对我来说就像我期待的那样
创建一个从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;
}
}