2015-08-26 1 views
9

Я пытаюсь сделать «отскок» webView, когда вытягивается после того, как свиток достиг максимального значения (вроде эффекта «pull-to-refresh»).WebView OverScroll

У меня есть настраиваемое представление простирающуюся 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?

Спасибо заранее.

ответ

3

Android 4.4 KitKat (Android 19) представляет новую версию WebView, которая основана на Chromium. Здесь, в этом браузере Chrome, они удалили многие функции из webview.

Некоторые из этих ошибок уже были отправлены в Google. Проверьте links: Restore scroll position feature doesn't work on KitKat

Из ссылок, это также один из жука сообщили

На Android 4.4 KitKat, вероятно, связано с WebView Chromium, положение прокрутки в предыдущей статье не восстанавливается если вы идете задний.

Это не точный ответ на этот вопрос, а просто указание на вещи. Но для этого нужно создать обходной путь в новом веб-обзоре. Позвольте мне проверить это и обновить мой ответ!

2

Возможно, this project может помочь вам. В настоящее время он не поддерживает WebView, но очень легко расширяется и может решить вашу проблему всего несколькими строками кода, т. Е. Путем внедрения проприетарного адаптера сверхпрокрутки для соответствия веб-представлениям. Должно быть что-то вроде этого:

// 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.

+1

Хотя эта ссылка может ответить на вопрос, лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится.- [Обзор] (/ review/low-quality-posts/10360944) – ForceMagic

+0

@ForceMagic отредактирован, чтобы объяснить, как использовать проект для потребностей Cheborra. Надеюсь это поможет. – d4vidi

+0

Хорошая работа! :) Активировать! – ForceMagic