2012-02-22 12 views
8

Próbuję użyć metody scrollTo w przeglądarce internetowej. To mój plik układu dla widoku WWW.WebView scrollTo nie działa

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
<WebView 
    android:id="@+id/webMap" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
/> 
</LinearLayout> 

Co usiłuję zrobić jest pokazanie plik HTML (który ma tylko obraz mapy) i przewijanie do pewnego obszaru na obrazie z:

mapWebView.loadUrl("file:///android_asset/maps/map.html"); 
mapWebView.scrollTo(300, 300); 

ale gdy WebView załadowaniu go zawsze pokazuje (0, 0) obrazu.

Na czym polega problem z scrollTo() tutaj?

+0

Spójrz @ http://stackoverflow.com/questions/22737412/android-webview-scrollto-is-not-working/22920457#22920457 –

Odpowiedz

16

Podejrzewam, że mapWebView.loadUrl("file:///android_asset/maps/map.html"); jest asynchroniczny, więc mapWebView.scrollTo(300, 300); wykonuje się przed zakończeniem ładowania przeglądarki. Po załadowaniu strony utracisz zastosowane ustawienie przewijania i zostanie ona zresetowana do góry.

Trzeba słuchać do załadowania strony, a następnie wskaż go:

mapWebView.setWebViewClient(new WebViewClient(){ 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      // TODO Auto-generated method stub 
      super.onPageFinished(view, url); 
      mapWebView.scrollTo(300, 300); 
     } 

    } 
    ); 

Nadzieja to pomaga

EDIT: Okazuje się, że to jest niewiarygodne, użyj zamiast tego:

mapWebView.setPictureListener(new PictureListener() { 

     @Override 
     public void onNewPicture(WebView view, Picture picture) { 
      mapWebView.scrollTo(300, 300); 

     } 
    }); 
+0

Dzięki za odpowiedź Deana. Próbowałem też, ale nadal nie działa. Jednak po scrollTo() i nazwie getScrollX() i getScrollY(), aby zobaczyć, co zwracają i jest (300, 300). Ale obraz jest nadal włączony (0, 0). – penguru

+0

Wypróbuj inny opublikowany przeze mnie kod, wygląda na to, że gotowa metoda ładowania jest czasami uruchamiana przed załadowaniem strony, szczególnie jeśli masz obrazy, które robisz. –

+2

Dzięki Dean, setPictureListener działa świetnie! – penguru

1

Spróbuj tego ..:

try { 
webview.setWebChromeClient(new WebChromeClient() { 

    @Override 
    public void onProgressChanged(WebView view, 
      int newProgress) { 

     if (newProgress >= 100) { 

      webview.scrollTo(x,y); 
     } 

     super.onProgressChanged(view, newProgress); 
    }; 

}); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
0

Następujące zastąpienie działa lepiej dla mnie.

protected void onLayout(boolean changed, int l, int t, int r, int b) { 
// set initial scroll to 
scrollTo(yourXpos,yourYpos); 
super.onLayout(changed, l, t, r, b); 
} 
Powiązane problemy