2011-11-21 3 views
10

Se qualcuno mi può aiutare con questo sarò molto felice. Ho un'applicazione che usa webview. La webview carica un url e ho utilizzato il tutorial di Google per sovrascrivere anche tutti gli altri link che voglio aprire con la webview. Ho creato un file animimation in res/ e un slide_right xml e finora tutto bene. Io chiamo l'effetto nella mia attività java principale ma si applica solo alla prima pagina. La cosa che voglio è l'effetto da applicare in ogni pagina che collega i carichi in webview.Come posso utilizzare gli effetti di transizione Android nella visualizzazione Web?

Potete aiutare il mio con il mio codice?

package com.ihome;

import android.app.Activity; 

import android.app.AlertDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 



public class IhomeActivity extends Activity { 
    WebView mWebView; 
    private class HelloWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      Animation slideRightAnimation = AnimationUtils.loadAnimation(getBaseContext(), R.anim.slide_right); 
      mWebView.startAnimation(slideRightAnimation); 
      view.loadUrl(url); 
      return true; 
     } 
    } 


@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { 
      Animation slideLeftAnimation = AnimationUtils.loadAnimation(getBaseContext(), R.anim.slide_left); 
      mWebView.startAnimation(slideLeftAnimation); 
      mWebView.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    mWebView = (WebView) findViewById(R.id.webview); 
    mWebView.setVerticalScrollBarEnabled(false); 
    mWebView.setHorizontalScrollBarEnabled(false); 
    mWebView.getSettings().setJavaScriptEnabled(true); 
    mWebView.loadUrl("http://www.google.com/"); 
    mWebView.setWebViewClient(new HelloWebViewClient()); 
+0

Ciao, qualcuno può aiutarmi con la domanda precedente? Dovrei caricare il mio codice? – alexgeorg86

+0

ho postato sopra il mio codice, please help me ... – alexgeorg86

+0

Spero che questo aiuto http://stackoverflow.com/q/7641121/577046 – Synxmax

risposta

21

Questo è il meglio che potessi fare con le API native, sembra che il tempismo non è giusto perché il caricamento della pagina e l'animazione sono asincrona .. EDIT: aggiornato, questo uno è leggermente migliore. EDIT2: Questo è il mio miglior tentativo finora, e permette all'utente di rendersi conto che la pagina si sta caricando .. L'unico modo per ottenere un'animazione semi-liscia è consentire alla pagina di precaricarsi, mentre l'utente non la vede.

package com.adeptdev.animwebview; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.view.View; 
import android.view.animation.Animation; 
import android.view.animation.AnimationUtils; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 

public class HelloWebViewActivity extends Activity { 
    ProgressDialog mProgressDialog; 


    private class HelloWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.setVisibility(View.GONE); 
      mProgressDialog.setTitle("Loading"); 
      mProgressDialog.show(); 
      mProgressDialog.setMessage("Loading " + url); 
      return false; 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      mProgressDialog.dismiss(); 
      animate(view); 
      view.setVisibility(View.VISIBLE); 
      super.onPageFinished(view, url); 
     } 
    } 

    private void animate(final WebView view) { 
     Animation anim = AnimationUtils.loadAnimation(getBaseContext(), 
       android.R.anim.slide_in_left); 
     view.startAnimation(anim); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     WebView view = (WebView) findViewById(R.id.webview); 
     if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) { 
      view.goBack(); 
      return true; 
     } 
     return super.onKeyDown(keyCode, event); 
    } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     mProgressDialog = new ProgressDialog(this); 
     WebView webView = (WebView) findViewById(R.id.webview); 
     webView.setVerticalScrollBarEnabled(false); 
     webView.setHorizontalScrollBarEnabled(false); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.loadUrl("http://www.google.com/"); 
     webView.setWebViewClient(new HelloWebViewClient()); 
    } 
} 
+0

Tom, grazie mille per questo! Puoi dirmi cosa fare anche con il pulsante indietro? – alexgeorg86

+0

Override onBackPressed nella vostra attività sottoclasse –

+0

qualcuno mi può aiutare, ancora una volta, voglio che quando si preme il pulsante Indietro per avviare un'animazione con la direzione opposta in modo aggiungo '@Override \t public void onBackPressed() { \t super.onBackPressed(); \t overridePendingTransition (android.R.anim.slide_out_right, android.R.anim.slide_out_right); \t} 'ma non funziona. Qualche suggerimento? – alexgeorg86