2013-04-18 16 views
8

WebView.getScale() è sconsigliata (ma ancora utilizzabile)Come arrivare scala WebView in Android 4

Il metodo consigliato per ottenere scala per la visualizzazione web è quello di utilizzare WebViewClient.onScaleChanged() http://developer.android.com/reference/android/webkit/WebViewClient.html#onScaleChanged(android.webkit.WebView, float, float)

ho aggiunto gestore corrispondente nel mio WebView personalizzato:

public class CustomWebView extends WebView { 

public CustomWebView(Context context) { 
    super(context); 
    setWebViewClient(new WebViewClient() { 
     @Override 
     public void onScaleChanged(WebView view, float oldScale, float newScale) { 
      super.onScaleChanged(view, oldScale, newScale); 
      currentScale = newScale 
     } 
    }); 
} 

E ora il problema: il metodo non invocato (almeno sul mio Nexus 7) se sono lo zoom in/zoom out tramite pinch, quindi funziona bene solo se uso i controlli dello zoom ma tonnellata.

+0

Hai trovato la risposta ormai? Ho lo stesso problema. –

+0

Non ho trovato il modo di prendere le scale cambiate anche, ma il mio scopo era quello di tracciare la scala attuale, quindi sono stato costretto a usare WebView.getScale() obsoleto invece di scalare l'approccio del listener. Se devi monitorare l'evento di modifica della scala su webview, prova a impostare il rilevatore di gesti personalizzato su Webview e semplicemente traccia gli eventi di pizzicamento. Non sono sicuro che funzionerà, solo un'idea. – abovesun

+0

Non ho ancora una soluzione (e non penso ci sia una diretta in questo caso), ma ho scoperto il motivo: la richiamata 'ScaleDetectorListener.onScaleEnd' in' WebView' (e più tardi il 'ZoomManager 'classe helper 'restituisce' setNewZoomScale' (per la versione' WebKit') o 'setZoomScale' (per la versione' ZoomManager') chiamata con scala 'mActualScale', e quei metodi attivano' onScaleChanged' solo quando il la scala non è uguale a 'mActualScale' (esiste un altro requisito'! mPreviewZoomOnly', ma quello è soddisfatto poiché 'onScaleEnd' lo imposta su' false'). – JAB

risposta

1

prova:

public MyWebView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    // TODO Auto-generated constructor stub 
    setWebViewClient(new WebViewClient() { 
     @Override 
     public void onScaleChanged(WebView view, float oldScale, float newScale) { 
      super.onScaleChanged(view, oldScale, newScale); 
      currentScale = newScale; 
     } 
    }); 
} 
+3

come questo differisce dal codice che ho messo sopra? – abovesun

+2

parametri costruttore: MyWebView (contesto contesto, AttributeSet attrs) –

3

sto sviluppando per il livello di API 17 e ho finito per usare il metodo deprecato getScale() per lo stesso motivo. WebViewClient.onScaleChanged() semplicemente non è stato attivato quando ho cambiato la scala utilizzando zoom pinch in WebView. Ho un GestureListener personalizzato nel mio WebView esteso che si comporta in modo diverso quando la vista viene ingrandita (scala 1.0+). Non ho potuto ottenere in modo affidabile il valore di scala corretto quando ho impostato una variabile di classe in onScaleChanged().