2015-08-26 28 views
9

Tôi đang cố gắng tạo webView "thoát" khi được kéo sau khi cuộn đạt đến mức tối đa (loại giống như hiệu ứng "kéo để làm mới").WebView OverScroll

Tôi có WebView xem tùy chỉnh mở rộng của tôi, và trọng phương pháp

@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; 
} 

và kết quả là chỉ

public static class Result 
{ 
    int scrollY; 
    int overScrollY; 

    ... getters() 
} 

Có điều là, tác phẩm này hoàn toàn trên bất kỳ chế độ xem nào (bao gồm xem web) trước KitKat.

Sau KitKat này hoạt động hoàn hảo trên bất kỳ xem trừ WebView, nơi các bản ghi cho scrolly luôn 0.

Bất kỳ ý tưởng là những gì có thể đã thay đổi trên phiên bản này của WebView?

Nếu điều này không bay, bất kỳ ý tưởng nào về cách đạt được hiệu ứng overScroll trên WebView một cách chính xác?

Cảm ơn trước.

Trả lời

3

Android 4.4 KitKat (Android 19) giới thiệu phiên bản mới WebView dựa trên Chromium. Ở đây trong trình duyệt Chromium này, họ đã gỡ bỏ nhiều tính năng từ webview.

Một số lỗi này đã được báo cáo cho Google. Kiểm tra links: Restore scroll position feature doesn't work on KitKat

Từ các liên kết, điều này cũng là một trong những lỗi báo cáo

Trên Android 4.4 KitKat, có lẽ liên quan đến WebView Chromium, vị trí cuộn của bài viết trước không được khôi phục khi bạn đi lại .

Đây không phải là câu trả lời chính xác cho câu hỏi này, mà chỉ hướng đến mọi thứ. Nhưng phải có một cách giải quyết để làm điều này trong webview mới. Hãy để tôi kiểm tra nó và cập nhật câu trả lời của tôi !!

2

Có lẽ this project có thể giúp bạn. Nó hiện không hỗ trợ WebViews nhưng rất dễ mở rộng và có thể giải quyết vấn đề của bạn chỉ bằng một vài dòng mã - tức là bằng cách triển khai bộ điều hợp cuộn độc quyền để phù hợp với chế độ xem Web. Phải là một cái gì đó như thế này:

// 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)); 

Nếu bạn cố gắng giải quyết, vui lòng xem xét đóng góp mã của bạn cho dự án trên GitHub.

+1

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi.- [Từ đánh giá] (/ review/low-quality-posts/10360944) – ForceMagic

+0

@ForceMagic chỉnh sửa để giải thích chính xác cách sử dụng dự án cho nhu cầu của Cheborra. Hi vọng điêu nay co ich. – d4vidi

+0

Làm tốt lắm! :) Upvoting! – ForceMagic