2012-02-22 14 views
8

Estoy intentando utilizar el método scrollTo de la vista web. Este es mi archivo de diseño para la vista web.WebView scrollTo no funciona

<?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> 

Lo que estoy tratando de hacer es mostrar un archivo html (que sólo tiene una imagen de mapa) y desplazarse a cierta área en la imagen con:

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

Pero cuando la vista web que se carga siempre muestra el (0, 0) de la imagen.

¿Cuál es el problema con scrollTo() aquí?

+0

Tome un vistazo @ http://stackoverflow.com/questions/22737412/android-webview-scrollto-is-not-working/22920457#22920457 –

Respuesta

16

Sospecho que mapWebView.loadUrl("file:///android_asset/maps/map.html"); es asincrónico, por lo que mapWebView.scrollTo(300, 300); se ejecuta antes de que la vista web haya terminado de cargarse. Una vez que la página se carga, habrá perdido la configuración de desplazamiento que aplicó y se restablecerá a la parte superior.

es necesario escuchar en el la carga de la página y luego desplazarse por él:

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

    } 
    ); 

Esperanza esto ayuda

EDIT: Resulta que este no es fiable, utilizar esto en su lugar:

mapWebView.setPictureListener(new PictureListener() { 

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

     } 
    }); 
+0

Gracias por la respuesta Dean. También lo probé, pero aún no funcionaba. Sin embargo, después de scrollTo() llamé a getScrollX() y getScrollY() para ver qué devuelven y es (300, 300). Pero la imagen sigue encendida (0, 0). – penguru

+0

Pruebe el otro código que publiqué, parece que el método de carga final a veces se dispara antes de que la página se cargue realmente, especialmente si tiene imágenes que usted hace –

+2

Gracias Dean, setPictureListener funciona muy bien! – penguru

1

Pruebe esto ...:

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

Seguir la anulación funciona mejor para mí.

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); 
} 
Cuestiones relacionadas