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

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

}

});

以上是 Android中解决WebView上下滑动监听问题 的全部内容, 来源链接: utcz.com/z/314005.html

回到顶部