最近在写一个商城的APP,是原生与html5混编。这项目中有这样一个功能要求: 首页上要有一个标题,如图上面要实现一些功能扫描登录的功能,下面整个是webview界面,要求在向下滑动的时候标题消失,滑动到顶端的时候把标题显示出来。
要完成以上功能,就要对webview界面进行滑动监听。
首先我们自定义一个Mywebview,代码如下:
public class MyWebView extends WebView { private OnScrollChangeListener mOnScrollChangeListener; public MyWebView(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); } }
然后在编写webview界面时使用我们的自定义的MyWebView,让后做滑动监听,代码如下:
mWebView.setOnScrollChangeListener(new MyWebView.OnScrollChangeListener() { @Override public void onPageEnd(int l, int t, int oldl, int oldt) { mTitleLin.setVisibility(View.GONE); } @Override public void onPageTop(int l, int t, int oldl, int oldt) { mTitleLin.setVisibility(View.VISIBLE); } @Override public void onScrollChanged(int l, int t, int oldl, int oldt) { mTitleLin.setVisibility(View.GONE); } });
当开始滑动时和滑动到低端时,标题栏隐藏起来,当滑动到顶端是,标题栏显示,这样我们要的效果就出来了