我试图使一个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()
}问题是,在任何视图(包括webview)上,在KitKat之前都能很好地工作。
(继KitKat之后)在任何视图上都能很好地工作,但WebView除外,其中scrollY的日志始终为0。
对于这个版本的WebView会发生什么变化,有什么想法吗?
如果这不能成功,那么对于如何正确地在overScroll上实现WebView效果有什么想法吗?
提前谢谢。
发布于 2015-08-31 10:48:35
Android4.4 KitKat (Android19)推出了一款基于Chromium的新版本的WebView。在这个铬浏览器中,他们从webview中删除了许多功能。
其中一些bug已经报告给了谷歌。检查链接:还原滚动位置功能在KitKat上不起作用
从链接来看,这也是报告的bug之一。
在Android4.4 KitKat上,可能与Chromium相关,当您返回时,上一篇文章的滚动位置不会恢复。
这不是这个问题的确切答案,而只是指向事物。但在新的网络视图中必须找到解决办法。让我检查一下,更新我的答案!!
发布于 2015-11-27 15:34:17
也许这个项目可以帮你解决问题。它目前不支持WebViews,但是很容易扩展,只需几行代码就可以解决问题--即通过实现一个专有的上滚动适配器来适应网络视图。应该是这样的:
// 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上的项目。
https://stackoverflow.com/questions/32236781
复制相似问题