Воздушный шар OSMDroid MapView со scrollView

Я использую osmdroid и бонусный пакет osmdroid, чтобы показывать воздушные шары. Внутри воздушных шаров есть scrollView, который содержит линейный макет (вертикальный) в качестве дочернего элемента.

Когда я пытаюсь прокрутить вниз, моя карта тоже прокручивается. Как я могу заставить действие прокрутки только на моем воздушном шаре?


person jzafrilla    schedule 21.01.2013    source источник


Ответы (1)


Хорошо, я нашел решение, может быть, это не лучшее решение, но оно работает для меня, как я и ожидал

Создайте класс, расширяющийся от 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;
    }
}
person jzafrilla    schedule 28.01.2013