【问题标题】:Yandex Mapview inside ScrollView not scrolling verticallyScrollView 内的 Yandex Mapview 不垂直滚动
【发布时间】:2017-11-13 10:45:56
【问题描述】:

mapview 只会横向滚动,就好像您尝试垂直滚动时,ScrollView 正在采取行动。我试过 requestDisallowInterceptTouchEvent(true);但它没有帮助。

PS。 Yandex MapView 扩展了 RelativeLayout

【问题讨论】:

标签: android dictionary scrollview android-mapview


【解决方案1】:

尝试使用 MapView onTouchEvent,如下所示

public boolean onTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
    // Disallow ScrollView to intercept touch events.
    this.getParent().requestDisallowInterceptTouchEvent(true);
    break;

case MotionEvent.ACTION_UP:
    // Allow ScrollView to intercept touch events.
    this.getParent().requestDisallowInterceptTouchEvent(false);
    break;
}

// Handle MapView's touch events.
super.onTouchEvent(ev);
return true;

}

requestDisallowInterceptTouchEvent 如果设置为 true,则可以滚动嵌套视图,如果为 false,则启用父 ScrollView 滚动。

对于 ListView,我们不需要这个事件监听器,只需 listview.setNestedScrollingEnabled(true);

mapview.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            switch (motionEvent.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    // Disallow ScrollView to intercept touch events.
                    this.getParent().requestDisallowInterceptTouchEvent(true);
                    break;

                case MotionEvent.ACTION_UP:
                    // Allow ScrollView to intercept touch events.
                    this.getParent().requestDisallowInterceptTouchEvent(false);
                    break;
            }

            super.onTouchEvent(ev);
            return true;
        }
    });

【讨论】:

  • onTouchEvent 没有被调用
  • 更改了我的答案,看看吧。
  • 不,问题是,地图视图绝对没有检测到触摸
【解决方案2】:

您必须创建自定义 MapView。按照下面提供的代码 sn-p

public class AppMapView extends MapView {

    public AppMapView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_UP:
               System.out.println("unlocked");
               this.getParent().requestDisallowInterceptTouchEvent(false);
               break;

            case MotionEvent.ACTION_DOWN:
               System.out.println("locked");
               this.getParent().requestDisallowInterceptTouchEvent(true);
               break;
       }
       return super.dispatchTouchEvent(ev);
   }
}

【讨论】:

    猜你喜欢
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多