Android: получить позицию прокрутки в WebView - PullRequest
5 голосов
/ 16 марта 2010

Я новичок в Android.

Я хотел бы просто знать, где на странице прокручивается пользователь. Когда в нижней части экрана появляется определенная точка на веб-странице, я хочу вызвать событие. Но этот код вызывает исключение. Я знаю, что WebView наследует getScrollY () от View. Я не правильно его реализую?

Заранее спасибо.

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;
    }
}

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Вы пишете WebView webview; в двух местах внутри метода OnCreate ().

Просто напиши webview = new WebView(this); вместо WebView webview = new WebView(this);

Таким образом, вы можете решить проблему с нулевым указателем.

2 голосов
/ 16 марта 2010

А исключением является?
Вот примечание по высоте экрана WebView от одного из моих приложений:

// current position (top) = getScrollY();  
// max position = getContentHeight();  
// screen height = getHeight();
0 голосов
/ 21 ноября 2017

В 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
  • На моем Nexus 5X на Android 8 scrollY никогда не достигал высоты, но останавливался на 1 дп до конца (обходной путь включен в код)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...