9

スクロールが最大に達した後に引っ張ったときに webView を「バウンス」させようとしています (「引っ張って更新」効果のようなものです)。

WebView を拡張し、メソッドをオーバーライドするカスタム ビューがあります。

 @Override
protected boolean overScrollBy(final int deltaX, final int deltaY, final int scrollX, final int scrollY, final int scrollRangeX, final int scrollRangeY, final int maxOverScrollX, final int maxOverScrollY, final boolean isTouchEvent)
{
    VerticalOverScrollController.Result result = overscrollController.calcVerticalOverScroll(deltaY, scrollY);
    Log.d("overScrollBy", "scrollY " + result.scrollY + " overScrollY " + result.overScrollY);

    return super.overScrollBy(deltaX, deltaY, scrollX, result.getScrollY(), scrollRangeX, scrollRangeY, maxOverScrollX, result.getOverScrollY(), isTouchEvent);
}

そしてcalcVerticalOverScroll

 public Result calcVerticalOverScroll(final int deltaY, final int scrollY)
{
    Result result = new Result();

    if (scrollY <= 0 && deltaY < 0)//if at top and pulling down...
    {
        result.scrollY = (maxTopOverScroll > 0) ? scrollY : 0;
        result.overScrollY = maxTopOverScroll;
    } else
    {
        result.scrollY = (maxBottomOverScroll > 0) ? scrollY : 0;
        result.overScrollY = maxBottomOverScroll;
    }

    return result;
}

結果はただ

  public static class Result
{
    int scrollY;
    int overScrollY;

    ... getters()
}

問題は、これはKitKat より前の任意のビュー ( webviewを含む)で完全に機能することです。

KitKat の後、これは、 scrollYのログが常に 0であるWebView を除くすべてのビューで完全に機能します。

このバージョンの WebView で何が変更された可能性があるかについてのアイデアはありますか?

これが飛ばない場合、WebView で overScroll 効果を正しく達成する方法についてのアイデアはありますか?

前もって感謝します。

4

2 に答える 2