Android中ScrollView与MapView滑动事件冲突解决

龚沛
2023-12-01
 MapView与ScrollView的冲突主要在于,当用户点击到MapView地图并且滑动的时候,希望由地图Map去处理点击事件,并包括后续的滑动事件、双手指缩放地图等等。 
       在ScrollView中,是会默认截断点击事件的,导致用户点击到地图后,地图基本是没有反应,更别谈双手指缩放地图了。 
       用户手指点击到地图,并且滑动的时候,很难确定用户是要ScrollView上下滑动还是操控地图内容滑动,所以我简单的认为,只要用户手指点击到地图,就是要对地图进行操作;当用户手指抬起,就认为用户不需要操作地图了。 

       解决思路也很简单,就是在用户点击到地图或者滑动地图时候,让ScrollView不截断点击事件,并传递给子View处理,也就是地图去处理点击事件;当用户手指抬起的时候,将ScrollView的状态恢复至之前的状态,也就是ScrollView可以截断点击事件。

这样处理,点击或者滑动MapView,不会干预到ScrollView的滑动。至此,我们的MapView最好是固定的高度。

mMapView.getChildAt(0).setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_UP){
            //允许ScrollView截断点击事件,ScrollView可滑动
            mScrollView.requestDisallowInterceptTouchEvent(false);
        }else{
            //不允许ScrollView截断点击事件,点击事件由子View处理
            mScrollView.requestDisallowInterceptTouchEvent(true);
        }
        return false;
    }
});




 类似资料: