2011-11-21 17 views
10

Bu konuda bana yardımcı olabilecek herkes çok mutlu olur. Webview kullanan bir uygulama var. Web görünümü bir url yükler ve ben de web sunumu ile açmak istediğim tüm diğer linkleri overide etmek için Google eğitimini kullandım. res/ ve slide_right xml'da bir animasyon dosyası oluşturdum ve şimdiye kadar çok iyi. Ana java aktivitemde etkisi yapıyorum ama sadece ilk sayfa için geçerli. İstediğim şey, web sayfasındaki yükleri birbirine bağlayan her sayfada uygulanacak etkidir.Android geçiş efektlerini web görünümünde nasıl kullanabilirim?

Koduma yazmama yardımcı olur musunuz?

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

Merhaba, yukarıdaki soru bana yardımcı olabilir mi? Kodumu yükledim mi? Benim kod yukarıda yayınlanan – alexgeorg86

+0

, bana yardım edin ... – alexgeorg86

+0

Umut bu yardım http://stackoverflow.com/q/7641121/577046 – Synxmax

cevap

21

Bu benim doğal apis ile yapabileceği en iyi, o zamanlama sayfa ve animasyon yükleme .. DÜZENLEME asenkrondur çok doğru çünkü değil görünüyor: güncellenen bu Biri marjinal daha iyidir. EDIT2: Bu şimdiye kadar benim en iyi denememdir ve kullanıcının sayfanın yüklendiğini fark etmesine izin verir. Yarı-pürüzsüz bir animasyon elde etmenin tek yolu, kullanıcının göremediği sırada sayfanın ön yüklemesine izin vermektir.

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

geliştiren java için çok yeniyim Tom, bunun için çok teşekkür ederim! Bana geri düğmesiyle ne yapacağımı söyler misin? i ters yönde olan bir animasyon başlatmak için geri düğmesine bastığınızda – alexgeorg86

+0

geçersiz kılma, ben bu yüzden @Override' eklemek istiyorum \t public void onBackPressed() { \t super.onBackPressed(); \t overridePendingTransition (android.R.anim.slide_out_right, android.R.anim.slide_out_right); \t} 'ancak işe yaramıyor. Öneriler var mı? –

+0

kimse bir kez daha bana yardımcı olabilir etkinlik alt sınıfta onBackPressed – alexgeorg86