Activityとfragmentの回転場アニメーションの実現

13678 ワード

最近仕事の中で多くのactivityアニメーションの切り替えのシーンに出会って、ネット上でいくつかの資源を探してついに実現して、1篇の簡単なblogを書いて記録します
Activityの回転アニメーションはみんなよく知っています.私たちはoverridePendingTransition(enterAnim,exitAnim)を使います.この方法を実現するためにAPI Level 5が加入している.この方法はstartActivity(Intent)or finish()の後に呼び出され(必ず後で使うと効果がありますよ)、次のこのターンテーブルアニメーションを指定します.
メソッドの最初のパラメータ:enterAnimは、新しいActivityのアニメーションに入るresource IDです.
メソッドの2番目のパラメータexitAnimは、古いActivity(現在のActivity)がアニメーションから離れたresource IDです.
したがって、この2つのパラメータのオブジェクトは2つのActivityです.上の2つのパラメータがアニメートされていない場合は、0をパラメータとして使用します.
アニメーションのリソースファイルはresanimディレクトリの下にあり、Viewアニメーションです.全体のアニメーションはactivityのwindowの上で増加して、きっとactivityの背景の色が透明に設定することを言わないでくださいに注意して、さもなくばアニメーションの効果が見えません.
ViewAnimationには基本的なアニメーションタイプが含まれており、一般的な回転アニメーションのニーズを基本的に満たすことができます.ルートノードは、、、interpolator element、またはです.setを用いて種々のネスト組合せを行うことができる.
コード例
Intent intent = new Intent(TestActivities.this,TestActivityFirst.class);
startActivity(intent);
// transaction animation
overridePendingTransition(R.anim.slide_in_bottom,R.anim.slide_out_bottom);

2つのアニメーション:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="100%p" android:toYDelta="0"
            android:duration="2000"/>  //      2 
    <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
            android:duration="2000" /> //     2 
set>
  //  
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromYDelta="0%p" android:toYDelta="100%p"
            android:duration="2000"/>
    <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
            android:duration="2000" />
set>

もう1つactivityにアニメーションを追加する方法は、themeを通じてactivityに回転アニメーションを追加することです.
まずresフォルダの下にanimフォルダを作成し、そこにfade_を作成します.in.xmlとfade_out.xml 2つのアニメーションリソースfade_in.xml//グラデーションアニメーション
  
<alpha xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="300"  
    android:fromAlpha="0.0"  
    android:interpolator="@android:anim/accelerate_interpolator"  
    android:toAlpha="1.0" />  

fade_out.xml//グラデーションアニメーション
  
<alpha xmlns:android="http://schemas.android.com/apk/res/android"  
    android:duration="300"  
    android:fromAlpha="1.0"  
    android:interpolator="@android:anim/accelerate_interpolator"  
    android:toAlpha="0.0" /> 

次にstyleはparentがtheme単独のstyleであればAndroidManifestにテーマとして設定できないことに注意すると宣言した.xmlでは、1はandroid:theme=";に設定できますが、2はできません.
1.
     
2.
    

現在、2つのactiviy A 1とA 2がA 1からA 2を起動すると、A 1が画面から消えてしまいます.このアニメーションはandroid:activityOpenExitAnimationアニメーションと呼ばれています.A 1からA 2を起動すると、A 2が画面に現れます.このアニメーションはandroid:activityOpenEnterAnimationアニメーションと呼ばれています.A 2からA 1に戻ると、A 2が画面から消えてしまいます.A 2からA 1に戻るとA 1が画面に表示され、A 1がA 1に追加されます.
最後のステップはAndroidManifestです.xmlのActivityの宣言にandroid:theme="@style/Anim_を追加fade”
  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="com.example.customanimationforactivity"  
    android:versionCode="1"  
    android:versionName="1.0" >  

    <uses-sdk  
        android:minSdkVersion="10"  
        android:targetSdkVersion="10" />  

    <application  
        android:allowBackup="true"  
        android:icon="@drawable/ic_launcher"  
        android:label="@string/app_name"  
        android:theme="@android:style/Theme.NoTitleBar" >  
        <activity  
            android:name="com.example.customanimationforactivity.MainActivity"  
            android:label="@string/app_name"  
            android:theme="@style/Anim_fade" >  
            <intent-filter>  
                <action android:name="android.intent.action.MAIN" />  
                <category android:name="android.intent.category.LAUNCHER" />  
            intent-filter>  
        activity>  
        <activity android:name=".AppActivity" android:theme="@style/Anim_fade" >  
        activity>  
    application>  

manifest>  

activityアニメーションについては、その中でも他の人の文章を参考にして紹介しています.http://blog.csdn.net/lmj623565791/article/details/22990643 http://blog.csdn.net/wangjia55/article/details/42556989
次はfragmentの切り替えアニメーションを受信します.私も仕事で2つの方法を使いました.

カスタムターンフィールドアニメーション


カスタムターンアラウンドアニメーションはsetCustomAnimations()メソッドで、Fragment追加時にBack Stackへの追加を指定できるため、ターンアラウンドアニメーションはadd、replace、removeがBack stackからpopが出る4つのケースがあります.
注意setCustomAnimations()メソッドはadd、remove、replace呼び出しの前に設定する必要があります.そうしないと、
 private void addFragment() {
        if (null == mFragmentManager) {
            mFragmentManager = getSupportFragmentManager();
        }

        mTextFragmentOne = new MyFragmentOne();
        FragmentTransaction fragmentTransaction = mFragmentManager
                .beginTransaction();
        fragmentTransaction.setCustomAnimations(
                R.anim.push_left_in,
                R.anim.push_left_out,
                R.anim.push_left_in,
                R.anim.push_left_out);

        fragmentTransaction.add(R.id.container, mTextFragmentOne);

        fragmentTransaction.addToBackStack(null);
        fragmentTransaction.commit();
    }

アニメーションのリソースファイルは簡単に書かないで、みんなで自分で書けばいいです.

複写oncreateAnimitionメソッドによるアニメーションの実現


/** * Called when a fragment loads an animation. */ public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) { return null; }
FragmentサブクラスがFragmentを継承した後にこのメソッドの内容を書き換えると、ここでアニメーションを得ることができます.
この方法はあるfragmentのアニメーションを実現することができて、具体的にどのように各パラメータを使うのはどういう意味ですか?Googleの公式ドキュメントを見て、使うのは簡単です.
必要な人を助けてほしい.