Android:获取WebView的滚动位置

时间:2010-03-16 18:01:10

标签: android webview

我是Android的新手。

我想知道用户滚动页面的位置。当网页上的某个点出现在屏幕底部时,我想触发一个事件。但是这段代码导致异常。我知道WebView从View继承了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;
    }
}

5 个答案:

答案 0 :(得分:2)

例外是什么? 以下是我的一个应用程序的WebView屏幕高度注释:

// current position (top) = getScrollY();  
// max position = getContentHeight();  
// screen height = getHeight();

答案 1 :(得分:2)

您正在OnCreate()方法中的两个位置编写WebView webview;

简单地写 webview = new WebView(this);代替WebView webview = new WebView(this);

这样你就可以解决空指针问题。

答案 2 :(得分:0)

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(解决方法包含在代码中)

答案 3 :(得分:0)

适用于使用Ionic框架的人。

从Webview中获取scrollTop 不起作用,因为ion_content包装了它自己的滚动条。

要获取webView的scrollTop,请使用:

javascript->

 var scroller = $('#_ionic_content')[0].firstChild.offsetParent;
 var  scrollTop_pos = scroller.scrollTop;

这对我有用。

答案 4 :(得分:0)

这对我有用,我正在计算基本滚动位置。

mainWebView.setOnScrollChangeListener { view, scrollX, scrollY, oldScrollX, oldScrollY ->

        if (scrollY > 800) {
            supportActionBar!!.setDisplayHomeAsUpEnabled(true)
            toolbar.logo = resources.getDrawable(R.mipmap.ic_launcher)
        } else {
            supportActionBar!!.setDisplayHomeAsUpEnabled(false)
            toolbar.logo = null
        }
        Log.e(TAG, "initializeWeb: $scrollY")
    }