Android中解决WebView上下滑动监听问题
有些时候我们需要监听webview的滚动事件,但WebView没有直接监听滑动的方法,看WebView的源码则会发现有一个protectedvoidonScrollChanged(intl,intt,intoldl,intoldt)方法。
这个方法。是受到保护的所以我们无法直接使用,所以我们写一个加强的WebView,重写onScrollChanged方法并利用接口回调。
publicclassNewWebViewextendsWebView{ privateOnScrollChangeListenermOnScrollChangeListener; publicNewWebView(Contextcontext,AttributeSetattrs){ super(context,attrs); } @Override protectedvoidonScrollChanged(intl,intt,intoldl,intoldt){ super.onScrollChanged(l,t,oldl,oldt); //webview的高度 floatwebcontent=getContentHeight()*getScale(); //当前webview的高度 floatwebnow=getHeight()+getScrollY(); if(Math.abs(webcontent-webnow)<1){ //处于底端 mOnScrollChangeListener.onPageEnd(l,t,oldl,oldt); }elseif(getScrollY()==0){ //处于顶端 mOnScrollChangeListener.onPageTop(l,t,oldl,oldt); }else{ mOnScrollChangeListener.onScrollChanged(l,t,oldl,oldt); } } publicvoidsetOnScrollChangeListener(OnScrollChangeListenerlistener){ this.mOnScrollChangeListener=listener; } publicinterfaceOnScrollChangeListener{ publicvoidonPageEnd(intl,intt,intoldl,intoldt); publicvoidonPageTop(intl,intt,intoldl,intoldt); publicvoidonScrollChanged(intl,intt,intoldl,intoldt); } }
使用:
publicclassNewsActivityextendsAppCompatActivity{ privateNewsWebViewmWebView; @Override protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_news); mWebView=(NewsWebView)findViewById(R.id.web_view); mWebView.setOnScrollChangeListener(newNewsWebView.OnScrollChangeListener(){ @Override publicvoidonPageEnd(intl,intt,intoldl,intoldt){ Logs.d("已经到达地端"); } @Override publicvoidonPageTop(intl,intt,intoldl,intoldt){ Logs.d("已经到达顶端"); } @Override publicvoidonScrollChanged(intl,intt,intoldl,intoldt){ } });
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。