工作篇 之 解决谷歌地图与 NestedScrollView 滑动冲突 冒个泡~

0
回复
296
查看
[复制链接]

102

主题

317

帖子

911

安币

代码手工艺人

Rank: 4

中级博主QQ达人最佳新人热心会员原创勋章明星会员突出贡献签到达人优秀版主资源达人推广达人

QQ
发表于 2019-2-1 09:45:01 | 显示全部楼层 |阅读模式
如果对本篇文章感兴趣,请前往,原文地址:http://www.apkbus.com/blog-904057-79478.html

> LZ-Says:情不知往矣,一往情深。 ![图片描述](/data/attachment/album/201901/31/170709asm6z0h6002hhk22.gif)### 前言话说,前段时间被地图虐个半死,那酸爽程度,简直无与伦比。一会儿,要翻墙;一会儿,网络不稳定,白屏了;一会儿,某些设备不支持 GMS 服务了。怎一个无奈至极。某天,项目收尾时,愕然发现在某页 Google Map 与当前页面滑动冲突,最直接的表现结果便是,手指触摸地图进行滑动时,地图视觉卡顿且页面会随着手指滑动而滑动,顿时很蛋疼,脑海第一想法事件分发,拦截丫的不就好了吗,最直接的,触摸地图的时候,父容器别管我不就好了。可惜,初步猜测谷歌 Baba 喜欢捉妖,自己搞了一通骚操作,肿么办,内心有点小躁动。这里感谢 Stack Overflow,业界良心呐~!!!一起来看解决之道~### 秀儿,是你么?首先,重写 SupportMapFragment ,这里主要通过 dispatchTouchEvent 进行事件分发,也可以简单理解为在这里我们去控制地图与父容器之间事件传递。```import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.FrameLayout;import com.google.android.gms.maps.SupportMapFragment;/** * @author: heliquan * @data: 2019/1/11 * @desc: 解决谷歌地图与 NestedScrollView 滑动冲突 *        https://stackoverflow.com/questions/41689968/google-map-fragment-scrolling-inside-nestedscrollview */public class MySupportMapFragment extends SupportMapFragment {    private OnTouchListener mListener;    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {        View layout = super.onCreateView(inflater, parent, savedInstanceState);        TouchableWrapper frameLayout = new TouchableWrapper(getActivity());        frameLayout.setBackgroundColor(getResources().getColor(android.R.color.transparent));        ((ViewGroup) layout).addView(frameLayout,                new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));        return layout;    }    public void setListener(OnTouchListener listener) {        mListener = listener;    }    public interface OnTouchListener {        public abstract void onTouch();    }    public class TouchableWrapper extends FrameLayout {        public TouchableWrapper(Context context) {            super(context);        }        @Override        public boolean dispatchTouchEvent(MotionEvent event) {            switch (event.getAction()) {                case MotionEvent.ACTION_DOWN:                    mListener.onTouch();                    break;                case MotionEvent.ACTION_UP:                    mListener.onTouch();                    break;                default:            }            return super.dispatchTouchEvent(event);        }    }}```接着,在布局中将 fragment 指定为自定义的 SupportMapFragment: `````` 最后,实例化地图的同时告诉父容器,您老还是踏实呆着吧。 ```private var mapFragment:MySupportMapFragment?=nullmapFragment = supportFragmentManager        .findFragmentById(R.id.mv_map) as MySupportMapFragmentif (mapFragment != null)    mapFragment!!.setListener { mDataBinding.nsv.requestDisallowInterceptTouchEvent(true) }mapFragment!!.getMapAsync(this)```到这里,小手点点冲突问题变解决咯~>还是要多去积累,多去深入。 ### 参考资料1. https://stackoverflow.com/questions/41689968/google-map-fragment-scrolling-inside-nestedscrollview;  继续阅读全文



想在安卓巴士找到更多优质博文,可移步博客区

如果对本篇文章感兴趣,请前往,
原文地址:
http://www.apkbus.com/blog-904057-79478.html
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )