▼Androidメモ▼
アクティビティ遷移時のアニメーション
アクティビティ遷移時のアニメーションを利用するプログラムを作成する。
「設定→画面設定→アニメーション表示」で「すべてのアニメーション」を選択しておく必要あり。
![]()
リソース
「res/drawable-nodpi」に「pic0.jpg」を配置。
「res/drawable-nodpi」に「pic1.jpg」を配置。
「res/anim」に「activity_open_enter.xml」を配置。
アクティビティ起動時の開く側のアニメーション。
「res/anim」に「activity_open_exit.xml」を配置。
activity_open_enter.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromYDelta="100%" android:toYDelta="0%" android:duration="500" android:fillAfter="true" android:fillEnabled="true"/> </set>
アクティビティ起動時の閉じる側のアニメーション。
「res/anim」に「activity_close_enter.xml」を配置。
activity_open_exit.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromYDelta="0%" android:toYDelta="-100%" android:duration="500" android:fillAfter="true" android:fillEnabled="true"/> </set>
アクティビティ終了時の開く側のアニメーション。
「res/anim」に「activity_close_enter.xml」を配置。
activity_close_enter.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromYDelta="-100%" android:toYDelta="0%" android:duration="500" android:fillAfter="true" android:fillEnabled="true"/> </set>
アクティビティ終了時の閉じる側のアニメーション。
activity_close_exit.xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromYDelta="0%" android:toYDelta="100%" android:duration="500" android:fillAfter="true" android:fillEnabled="true"/> </set>
ソースコード
TransitionEx0.java package net.npaka.transitionex; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.LinearLayout; //トランジション0 public class TransitionEx0 extends Activity implements View.OnClickListener { private final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT; //アプリの初期化 @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); requestWindowFeature(Window.FEATURE_NO_TITLE); //レイアウトの生成 LinearLayout layout=new LinearLayout(this); layout.setBackgroundResource(R.drawable.pic0); setContentView(layout); //ボタンの生成 Button button=new Button(this); button.setText("アクティビティの遷移"); button.setOnClickListener(this); button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC)); layout.addView(button); } //ボタンクリック時に呼ばれる public void onClick(View view) { Intent intent=new Intent(this,TransitionEx1.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); //startActivity()またはfinish()の後で遷移アニメ指定 overridePendingTransition( R.anim.activity_open_enter, R.anim.activity_open_exit); } }
TransitionEx1.java package net.npaka.transitionex; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.LinearLayout; //トランジション1 public class TransitionEx1 extends Activity implements View.OnClickListener { private final static int WC=LinearLayout.LayoutParams.WRAP_CONTENT; //アプリの初期化 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); //レイアウトの生成 LinearLayout layout=new LinearLayout(this); layout.setBackgroundResource(R.drawable.pic1); setContentView(layout); //ボタンの生成 Button button=new Button(this); button.setText("アクティビティの終了"); button.setOnClickListener(this); button.setLayoutParams(new LinearLayout.LayoutParams(WC,WC)); layout.addView(button); } //ボタンクリック時に呼ばれる public void onClick(View view) { finish(); //startActivity()またはfinish()の後で遷移アニメ指定 overridePendingTransition( R.anim.activity_close_enter, R.anim.activity_close_exit); } //キー押下時に呼ばれる @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode()==KeyEvent.KEYCODE_BACK) { finish(); //startActivity()またはfinish()の後で遷移アニメ指定 overridePendingTransition( R.anim.activity_close_enter, R.anim.activity_close_exit); return true; } return super.dispatchKeyEvent(event); } }
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.npaka.transitionex" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".TransitionEx0" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".TransitionEx1" android:label="@string/app_name"> </activity> </application> <uses-sdk android:minSdkVersion="7" /> </manifest>
テーマによる指定
遷移アニメの変更が必要ない時は、overridePendingTransition()の代わりにテーマで指定することも可能。
「res/values」に「styles.xml」を配置。
styles.xml <?xml version="1.0" encoding="utf-8"?> <resources> <style name="Animation.Activity" parent="android:Animation"> <item name="android:activityOpenEnterAnimation">@anim/activity_open_enter</item> <item name="android:activityOpenExitAnimation">@anim/activity_open_exit</item> <item name="android:activityCloseEnterAnimation">@anim/activity_close_enter</item> <item name="android:activityCloseExitAnimation">@anim/activity_close_exit</item> </style>
<style name="MyTheme" parent="android:Theme"> <item name="android:windowAnimationStyle">@style/Animation.Activity</item> </style> </resources>
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.npaka.transitionex" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".TransitionEx0" android:label="@string/app_name" android:theme="@style/MyTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".TransitionEx1" android:label="@string/app_name" android:theme="@style/MyTheme"> </activity> </application> <uses-sdk android:minSdkVersion="7" /> </manifest>
−戻る−