首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebView OverScroll

WebView OverScroll
EN

Stack Overflow用户
提问于 2015-08-26 21:12:20
回答 2查看 4.2K关注 0票数 9

我试图使一个webView“反弹”时,拉动后,滚动达到最大(有点像“拉-刷新”效果)。

我的自定义视图扩展了WebView,并重写了该方法

代码语言:javascript
复制
 @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是

代码语言:javascript
复制
 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;
}

结果是公正的

代码语言:javascript
复制
  public static class Result
{
    int scrollY;
    int overScrollY;

    ... getters()
}

问题是,在任何视图(包括webview)上,在KitKat之前都能很好地工作

(继KitKat之后)在任何视图上都能很好地工作,但WebView除外,其中scrollY的日志始终为0。

对于这个版本的WebView会发生什么变化,有什么想法吗?

如果这不能成功,那么对于如何正确地在overScroll上实现WebView效果有什么想法吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-08-31 10:48:35

Android4.4 KitKat (Android19)推出了一款基于Chromium的新版本的WebView。在这个铬浏览器中,他们从webview中删除了许多功能。

其中一些bug已经报告给了谷歌。检查链接还原滚动位置功能在KitKat上不起作用

从链接来看,这也是报告的bug之一。

在Android4.4 KitKat上,可能与Chromium相关,当您返回时,上一篇文章的滚动位置不会恢复。

这不是这个问题的确切答案,而只是指向事物。但在新的网络视图中必须找到解决办法。让我检查一下,更新我的答案!!

票数 3
EN

Stack Overflow用户

发布于 2015-11-27 15:34:17

也许这个项目可以帮你解决问题。它目前不支持WebViews,但是很容易扩展,只需几行代码就可以解决问题--即通过实现一个专有的上滚动适配器来适应网络视图。应该是这样的:

代码语言:javascript
复制
// 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上的项目。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32236781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档