2011-11-21 17 views
10

誰かが私を助けることができるなら、私はとても幸せになるでしょう。私はwebviewを使用するアプリケーションを持っています。 webviewはURLをロードし、私はwebチュートリアルで開く他のすべてのリンクを上書きするためにGoogleチュートリアルを使用しています。私はres/slide_right xmlのアニメーションファイルを作成しています。私は主なJavaのアクティビティで効果を呼び出しますが、最初のページにのみ適用されます。私が欲しいのは、リンクがwebviewでロードするすべてのページに適用する効果です。ウェブビューでアンドロイドトランジションエフェクトを使用するにはどうすればよいですか?

私のコードで私を助けることができますか?

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

こんにちは、誰でも上記の質問で私を助けることができますか?コードをアップロードする必要がありますか?私は自分のコードの上に掲示 – alexgeorg86

+0

は、私を助けてください... – alexgeorg86

+0

・ホープ、このヘルプ http://stackoverflow.com/q/7641121/577046 – Synxmax

答えて

21

これは私がネイティブAPIで行うことができる最高で、EDIT ...ページの読み込みとアニメーションが非同期であるため、タイミングが非常に適切ではないようだ:更新、この1つはやや良いです。 EDIT2:これは今までの私の最高の試みであり、ユーザーはページが読み込まれていることに気付くことができます。半滑らかなアニメーションを得る唯一の方法は、ページがプリロードできるようにすることです。

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はこのことに非常に感謝します!戻るボタンでも何をすべきか教えていただけますか?私は反対の方向にアニメーションを開始するには[戻る]ボタンを押したとき – alexgeorg86

+0

オーバーライドは、私はので、私は@Override」を追加したい \tます。public void onBackPressed(){ \t super.onBackPressed (); \t overridePendingTransition(android.R.anim.slide_out_right、android.R.anim.slide_out_right); \t} 'でも動作しません。 –

+0

は、誰もが、再び私を助けることができ、あなたの活動のサブクラスでonBackPressed – alexgeorg86

関連する問題