频道栏目
首页 > 资讯 > 其他 > 正文

WebView缩放后左边内容被遮盖的问题

17-08-15        来源:[db:作者]  
收藏   我要投稿

WebView缩放后左边内容被遮盖的问题。

效果图如下。

该效果图是使用了谷歌最新的CoordinatorLayout 嵌套了富文本控件RichEditor(也是webView),效果还是可以的,可以看到,在WebView放大时,左边内容一直是在原点处放大,而且滑动很流畅,我之前用的还是ScrollView + RichEditor的方式,暂时还没有改用谷歌的新控件CoordinatorLayout 来替换ScrollView.


问题分析

webView在放大时 左边会超过屏幕外,毕竟webView是一个可滚动的控件,有横向的滚动条,放大时,横向滚动条出现,这个时候滚动条随着手势向右滚动,左边的内容就看不到了,因此改变改滚动条的起始X轴上的位置即可!

解决方案

根据上述分析,查看WebView源码中的实现,然而对于WebView.scroll大家最先想到的就是webView.ScrollTo(int x,int y);这个方法,但是这个函数是两个参数,Y方向上的位置不太好确定,根据分析,Y方向是手势触摸的局部点,是局部的放大,没有必要改变这个值,因此,只需要改变X,让其滚动到X轴的原点即可,查看源码后,发现了这个方法:

/**
     * Set the horizontal scrolled position of your view. This will cause a call to
     * {@link #onScrollChanged(int, int, int, int)} and the view will be
     * invalidated.
     * @param value the x position to scroll to
     */
    public void setScrollX(int value) {
        scrollTo(value, mScrollY);
    }
setScrollX(0)就可以了,设置值后,还是触发了这个ScrollTo的方法,不过咱们不用传Y值过去了,很强势!

setScrollX(0) 触发位置

很明显,WebView在放大缩小时肯定要触发OnTouch事件,因此可以重写OnTouchListener或者在webView的onTouchEvent中做点事情,代码如下:

 

 webView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                webView.setScrollX(0);
                return false;
            }
        });

我用的是TouchListener方法,还可以在OnTouchEvent里面设置,其效果是一样的,不用管它是down事件还是move事件,放大缩小直接setScrollX(0)即可!

相关TAG标签
上一篇:微信小程序中显示倒计时
下一篇:Unity3d AudioSource
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站