在使用WebView时,保存上次阅读位置。

来源:互联网 发布:树上10只鸟 程序员 编辑:程序博客网 时间:2024/06/09 17:08

需求:很多时候,我们阅读类的app都会帮助用户存储上一次的阅读位置,方便用户进入到下一次的阅读位置。那如果我们开发者使用的是WebView时,是否可以记住阅读位置呢?  

 首先,我们废话不多说, 开始上代码。
/** * 自定义的webview,用于监听滑动的位置 */public class MyWebView extends WebView {    public MyWebView(Context context) {        super(context);    }    public MyWebView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public MyWebView(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);    }       //clampedX,clampedY用于判断是否发生了onOverScrolled    @Override    protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {        super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);        //设置监听,如果没有滑动到底部,则记录下当前的位置,如果滑动完毕,则返回true        if (onOveredScroll != null) {            onOveredScroll.onOvered(scrollY);        }    }    //自定义一个滚动完毕的监听接口    onOveredScroll onOveredScroll = null;    public interface onOveredScroll {        void onOvered(int scrollY);    }    public void setOnOveredScroll(MyWebView.onOveredScroll onOveredScroll) {        this.onOveredScroll = onOveredScroll;    }}
通过查阅webview的源代码,我们发现。在onOverScrolled这个方法中,会传入scrollX和scrollY 这两个参数,他们分别代表当前WebView 滑动时的坐标。 亲们,是不是突然恍然大悟了? 下面我们就可以通过一个接口,在Activity中实施监听Webview的滑动位置了!

//设置滚动位置监听int curPos =-1;        mWebView.setOnOveredScroll(new MyWebView.onOveredScroll() {            @Override            public void onOvered(int scrollY) {                curPos = scrollY;            }        });
这时候,我们可以保存scrollY 到数据库或者sharedpreferences中, 读取位置的坐标后。 再用mWebView.scrollto 方法自动跳转到用户上次查阅的地方啦!
0 0