解决WebView滑动监听问题

作者: 麦兜叮叮当 | 来源:发表于2017-04-13 20:49 被阅读0次

    有些时候我们需要监听webview的滚动事件,但WebView没有直接监听滑动的方法,看WebView的源码则会发现有一个protected void onScrollChanged(int l, int t, int oldl, int oldt)方法。

    这个方法。是受到保护的所以我们无法直接使用,所以我们写一个加强的WebView,重写onScrollChanged方法并利用接口回调。

    public class NewWebView extends WebView{
    
        private OnScrollChangeListener mOnScrollChangeListener;
        
        public NewWebView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
        
        @Override 
        protected void onScrollChanged(int l, int t, int oldl, int oldt) {
            super.onScrollChanged(l, t, oldl, oldt);
            // webview的高度
            float webcontent = getContentHeight() * getScale();
            // 当前webview的高度
            float webnow = getHeight() + getScrollY();
            if (Math.abs(webcontent - webnow) < 1) {
                //处于底端 
                mOnScrollChangeListener.onPageEnd(l, t, oldl, oldt);
            } else if (getScrollY() == 0) {
                //处于顶端
                mOnScrollChangeListener.onPageTop(l, t, oldl, oldt);
            } else { 
                mOnScrollChangeListener.onScrollChanged(l, t, oldl, oldt); 
            } 
        }
        
        public void setOnScrollChangeListener(OnScrollChangeListener listener) {
            this.mOnScrollChangeListener = listener; 
        }
        
        public interface OnScrollChangeListener {
            
            public void onPageEnd(int l, int t, int oldl, int oldt);
            
            public void onPageTop(int l, int t, int oldl, int oldt);
            
            public void onScrollChanged(int l, int t, int oldl, int oldt); 
        
        }
        
    }
    

    使用:

    public class NewsActivity extends AppCompatActivity {
    
        private NewsWebView mWebView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_news);
            mWebView = (NewsWebView) findViewById(R.id.web_view);
            mWebView.setOnScrollChangeListener(new NewsWebView.OnScrollChangeListener() {
                @Override
                public void onPageEnd(int l, int t, int oldl, int oldt) {
                    Logs.d("已经到达地端");
                }
    
                @Override
                public void onPageTop(int l, int t, int oldl, int oldt) {
                    Logs.d("已经到达顶端");
                }
    
                @Override
                public void onScrollChanged(int l, int t, int oldl, int oldt) {
                }
            });
    

    做个笔记,便于下次使用😊

    相关文章

      网友评论

        本文标题:解决WebView滑动监听问题

        本文链接:https://www.haomeiwen.com/subject/ysqiattx.html