欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中解决WebView上下滑动监听问题

程序员文章站 2022-10-24 17:15:32
有些时候我们需要监听webview的滚动事件,但webview没有直接监听滑动的方法,看webview的源码则会发现有一个protected void onscrollch...

有些时候我们需要监听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) {
   }
  });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。