我是安卓新手。
我只想知道用户在页面上滚动到的位置。当网页上的某个点出现在屏幕底部时,我想触发一个事件。但这段代码会引发异常。我知道WebView继承了getScrollY()
从视图。我没有正确实施吗?
提前致谢。
public class Scroll extends Activity {
public WebView webview;
public float yPos;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webview = new WebView(this);
setContentView(webview);
webview.loadUrl("file:///android_asset/Scroll.html");
}
public boolean onTouchEvent(final MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_MOVE) {
yPos = webview.getScrollY();
Log.v("Scroll", "yPos = " + yPos);
}
return false;
}
}
WebView 有一个方法来获取其内容高度,我在解决方案中使用了该方法:
webView.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View view, int scrollX, int scrollY, int oldScrollX, int oldScrollY) {
WebView webView = (WebView) view;
float contentHeight = webView.getContentHeight() * webView.getScaleY();
float total = contentHeight * getResources().getDisplayMetrics().density - view.getHeight();
// on some devices just 1dp was missing to the bottom when scroll stopped, so we subtract it to reach 1
float percent = Math.min(scrollY / (total - getResources().getDisplayMetrics().density), 1);
Log.d("SCROLL", "Percentage: " + percent);
if (scrollY >= total - 1) {
Log.d("SCROLL", "Reached bottom");
}
}
}
密切注意,提防,小心:
- 必须考虑 WebView 比例才能获得总滚动高度
- 显示密度必须乘以内容高度才能与scrollY进行比较
- 在我的 Android 8 Nexus 5X 上,scrollY 从未达到高度,但在结束前停止了 1dp(解决方法包含在代码中)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)