scrollview嵌套webView的底部出现空白和缩放冲突问题处理
来源:互联网 发布:shadowsockx for mac 编辑:程序博客网 时间:2024/04/30 04:03
项目中activity中的webView在scrollview嵌套fragment的子fragment中,设置webView可缩放时滑动冲突,缩放卡顿,大片空白现象......
1.大片空白==解决
//1)添加调用引用,便于Js调用本地重新测量尺寸webView.addJavascriptInterface(this,"App");
// 2)在onPageFinish中,添加Js注入webView.loadUrl("javascript:App.resize(document.body.getBoundingClientRect().height)");//3)在当前类中添加调用方法,部分版本需要添加@JavaScriptInterface@JavascriptInterfacepublic void resize(final float height) { getActivity().runOnUiThread(new Runnable() { @Override public void run() { webView.setLayoutParams(new RelativeLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density))); } });}
2.滑动冲突,卡顿==解决方法重写WebView的方法, 也有人说可以用event.getPointerCount()>=2来判断是否为手势缩放从而使用
requestDisallowInterceptTouchEvent(true);来拦截事件,但是本人认为这是不全面的因为你缩放时也是可能要滑动webview来查看放大的内容的,这时候你不能要求用户都用2个以上手指去滑动吧?
/** * Created by ** on 2017/3/23. */public class MyWebView extends WebView { private Context context; private boolean isScroll = true;// webview 是否滚动 PointF downP = new PointF(); public MyWebView(Context context) { super(context); } public MyWebView(Context context, AttributeSet attrs) { super(context, attrs); } public MyWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { //判断是否分发,返回为true则不分发下去 return isScroll; } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //webview被点击到,即可滑动 isScroll = true; downP.x = event.getX(); downP.y = event.getY(); //通知父控件现在进行的是本控件的操作,不要对我的操作进行干扰 getParent().requestDisallowInterceptTouchEvent(true); break; case MotionEvent.ACTION_MOVE: float lastY = event.getY(event.getPointerCount() - 1); if (isBottom())//如果到达底部,先设置为不能滚动 isScroll = false; // 如果到达底部,但开始向上滚动手向下滑,那么webview可以滚动 if (isBottom() && (downP.y - lastY < 0)) isScroll = true; if (isTop())//滑到顶部不能再滑 isScroll = false; getParent().requestDisallowInterceptTouchEvent(isScroll); break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: isScroll = false; getParent().requestDisallowInterceptTouchEvent(isScroll); break; } return super.onTouchEvent(event); } /** * 判断是否到WebView达底部 */ private boolean isBottom() { // WebView的总高度 float contentHeight = getContentHeight() * getScale(); // WebView的现高度 float currentHeight = getHeight() + getScrollY(); // 之间的差距小于2便认为滑动到底部 return contentHeight - currentHeight < 1; } private boolean isTop() { //当ScrollY为0是到达顶部 return getScrollY() == 0; }}最近发现之前用以上方法解决的WebView问题是没出现了,但又发现一个新的问题:有时会有WebView加载显示不全,只显示以小段的情况;经测试发现跟处理空白问题的代码有关系,但一直没能从根本上解决;望有遇到过类似问题的朋友能分享经验或一同探讨!!!!参考: 一个简单的Demo带你彻底掌握解决View滑动冲突的办法 http://blog.csdn.net/tyk0910/article/details/53414299android 关于Scrollview嵌套WebView 滑动问题http://www.apkbus.com/forum.php?mod=viewthread&tid=166155&highlight=%E5%B5%8C%E5%A5%97webview重定位问题的解决 http://www.apkbus.com/blog-192385-59984.html
0 0
- scrollview嵌套webView的底部出现空白和缩放冲突问题处理
- ScrollView和WebView 嵌套,底部出现大块空白的问题
- ScrollView嵌套WebView出现底部空白问题
- ScrollView和GridView嵌套使用出现的冲突问题
- ScrollView嵌套WebView,产生的空白和不能回到顶站的问题
- Webview内嵌在ScrollView中的底部空白和滑动冲突
- android scrollview嵌套webview横向滚动冲突的问题
- ListView嵌套WebView,滚动时有的WebView底部出现大量空白,高度不定如何解决
- scrollview和viewpager嵌套冲突的问题
- 关于Android ScrollView嵌套WebView冲突问题
- android scrollview嵌套webview滑动冲突问题
- scrollview嵌套webview冲突
- android webview在scrollview内底部出现大面积空白
- android 异常问题 Scrollview中嵌套webview出现大面积空白(第二次打开同一个地址下面才出现空白)
- 解决scrollview嵌套ImageView时,出现除顶部和底部黑块的问题[ 转载]
- 解决ScrollView嵌套ViewPager出现的滑动冲突问题
- 解决ScrollView嵌套ViewPager出现的滑动冲突问题
- ScrollView和listView嵌套出现的问题
- 探索式软件测试助力软件测试人员更高效地测试
- (一)android为什么需要recovery升级?
- 大数据Java基础系列-final关键字
- [TensorFlow学习笔记2]构建训练softmax分类器
- Hadoop学习
- scrollview嵌套webView的底部出现空白和缩放冲突问题处理
- SQL数据库的一些操作
- 八、ngResource模块
- 逆向的一些思路
- sk_buff 2.6.24前后差别
- 为何与0xff进行与运算
- Android端公司通讯录开发与实现(一)
- 聊聊TCP三次握手和四次挥手
- 开始LeetCode算法篇,一切不晚