2010-12-15 13 views
12

私は2つのXMLファイルを持っていて、私の活動はユーザーからのいくつかのボタンを押すことに基づいて適切な内容をsetContentViewに設定します。コンテンツビューを変更するためのトランジションアニメーションを変更することはできますか?同じアクティビティでビューを変更するときに遷移アニメーションを行うことは可能ですか?

これまでは、新しいアクティビティを開始するのに適したsuper.overridePendingTransition()が表示されていますが、私の例では新しいアクティビティが開始されず、現在のレイアウトが変更されます。

答えて

31

マティアス・リンは非常にうまく説明しています。

Androidフレームワークが提供するデフォルトの在庫動画をいつでも使用できます。

HERESにサンプルコード:

boolean isFirstXml=evaluatingConditionFunction(); 
LayoutInflater inflator=getLayoutInflater(); 
View view=inflator.inflate(isFirstXml?R.layout.myfirstxml:R.layout.myseconxml, null, false); 
view.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right)); 
setContentView(view); 

は、あなたの親ビューを保持している、あなたの活動のいずれかからこれを呼び出します。

カスタムアニメーションの場合は、開発者ドキュメントにアクセスできます。 Heresのdocumentationリンク。

7

はい、好きなほとんどのビューでアニメーションを適用できます。ちょうど経由view.startAnimation(animation);

それぞれのレイアウト(コンテンツビュー)の外側のビューグループを取り、それにアニメーションを適用します。どのようなアニメーションをしたいのかに応じて、両方のレイアウトを膨張させたり読み込んだりすることができますが、どちらか一方を非表示にしてスワップすることは理にかなっています。どのような移行を心に留めておいてください。

たとえば、アニメーションを終了したとき(AnimationListener)、新しいレイアウトにコンテンツビューを設定してコンテンツを元に戻すときに、現在のレイアウトでalphaAnimationを実行すると、別のalphaAnimationを介して

3

より良い解決策は、ViewFlipperを使用しています。これはFrameLayoutであり、ビューを変更するときにアニメーションを行うことができます。そして

<ViewFlipper 
    android:id="@+id/[your_id_here]" 
    android:inAnimation="..." 
    android:outAnimation="..." 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <RelativeLayout 
      <!--Your first layout --> 
     </RelativeLayout> 
     <RelativeLayout 
      <!--Your second layout --> 
     </RelativeLayout> 
</ViewFlipper> 

は、setDisplayedChild(int)又はshowNext()又はshowPreviousとビューを切り替えます。左右の動きのアニメーションが異なる場合は、トランジションの前にコードにinAnimationoutAnimationを設定する必要があります。

さらに詳しい例はhereです。

+0

ありがとうございます。 'oldActivity.startActivity(newActivityIntent);を使って行ったアニメーションで2番目のアクティビティを開始するよりもはるかに簡単です。 oldActivity.overridePendingTransition(R.anim.slide_in_up、R.anim.slide_out_up); ' –

関連する問題