【问题标题】:WebView OverScrollWebView OverScroll
【发布时间】:2015-11-21 02:13:11
【问题描述】:

我试图在滚动达到最大值后拉动 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()
}

问题是,这在 any 视图(包括 webview在 KitKat 之前完美运行。。 p>

在 KitKat 之后,这在 WebView 之外的任何视图上都可以完美运行,其中 scrollY 的日志始终为 0。

关于这个版本的 WebView 有什么改变有什么想法吗?

如果这不成功,关于如何在 WebView 上正确实现 overScroll 效果的任何想法?

提前致谢。

【问题讨论】:

    标签: android webview overscroll


    【解决方案1】:

    Android 4.4 KitKat (Android 19) 引入了基于 Chromium 的新版 WebView。在这个 chromium 浏览器中,他们从 webview 中删除了许多功能。

    其中一些错误已报告给 Google。检查linksRestore scroll position feature doesn't work on KitKat

    从链接来看,这也是报告的错误之一

    在可能与 Chromium WebView 相关的 Android 4.4 KitKat 上, 上一篇文章的滚动位置在你去的时候没有恢复 返回。

    这不是这个问题的确切答案,而只是指向事物。但是在新的 webview 中必须有一个解决方法。让我检查一下并更新我的答案!

    【讨论】:

      【解决方案2】:

      也许this project 可以帮助你。它目前不支持 WebViews 但很容易扩展,并且只需几行代码即可解决您的问题 - 即通过实现专有的过度滚动适配器以适应 Web 视图。应该是这样的:

      // First, define an adapter class (this could work as-is, haven't tried it):
      
      public class WebViewOverScrollDecorAdapter implements IOverScrollDecoratorAdapter {
      
          protected final WebView mWebView;
      
          public WebViewOverScrollDecorAdapter(WebView view) {
              mWebView = view;
          }
      
          @Override
          public View getView() {
              return mWebView;
          }
      
          @Override
          public boolean isInAbsoluteStart() {
              return !mWebView.canScrollVertically(-1);
          }
      
          @Override
          public boolean isInAbsoluteEnd() {
              return !mWebView.canScrollVertically(1);
          }
      }
      
      // Then, apply it over the web-view:
      
      WebView webView = ...;
      new VerticalOverScrollBounceEffectDecorator(new WebViewOverScrollDecorAdapter(webView));
      

      如果你成功了,请考虑将你的代码贡献给 GitHub 上的项目。

      【讨论】:

      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
      • @ForceMagic 已编辑以准确解释如何使用该项目来满足 Cheborra 的需求。希望这会有所帮助。
      • 干得好! :) 点赞!
      • @ForceMagic 谢谢 :-)
      猜你喜欢
      • 2019-01-15
      • 1970-01-01
      • 2019-11-14
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 2019-10-04
      • 2020-12-01
      相关资源
      最近更新 更多