带有scrollView的OSMDroid MapView气球

时间:2013-01-21 09:35:13

标签: android osmdroid android-scrollview

我正在使用osmdroid和osmdroid奖励包来展示气球。 在气球内部有一个scrollView,它包含一个linearlayout(垂直)作为孩子。

当我尝试向下滚动时,我的mapview也会滚动。 我怎么能只将滚动动作强制到我的气球?

1 个答案:

答案 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;
    }
}