1

我正在使用 osmdroid 和 osmdroid 奖励包来展示气球。在气球内部有一个滚动视图,其中包含一个线性布局(垂直)作为子级。

当我尝试向下滚动时,我的地图视图也会滚动。我怎样才能强制滚动动作只对我的气球?

4

1 回答 1

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;
    }
}
于 2013-01-28T09:41:59.947 回答