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

来源:互联网 发布:投影机融合软件 编辑:程序博客网 时间:2024/05/24 06:01


效果图如下



  该效果图是使用了谷歌最新的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)即可!



 
原创粉丝点击