Activityにアニメーションを付与する(TranslateAnimation)
|Viewにアニメーションを付与する(Tweenアニメーション) では、Viewにアニメーションを付与する例をご説明しました。
<?xml version="1.0" encoding="utf-8"?> <!--Activity1のフェードアウトのアニメーション--> <set xmlns:android="http://schemas.android.com/apk/res/android</a>" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromXDelta="100%" android:toXDelta="0%" android:duration="300" android:fillAfter="true" android:fillEnabled="true"/> </set>
<?xml version="1.0" encoding="utf-8"?> <!--Activity2のフェードインのアニメーション--> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromXDelta="0%" android:toXDelta="-100%" android:duration="300" android:fillAfter="true" android:fillEnabled="true"/> </set>
<?xml version="1.0" encoding="utf-8"?> <!--Activity1がフェードアウトから戻ってくる場合のアニメーション--> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromXDelta="-100%" android:toXDelta="0%" android:duration="300" android:fillAfter="true" android:fillEnabled="true"/> </set>
<?xml version="1.0" encoding="utf-8"?> <!--Activity2の終了時のアニメーション--> <set xmlns:android=http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:duration="300" android:fillAfter="true" android:fillEnabled="true"/> </set>
それぞれのファイルの違いは、Android:~XDelta=””の部分のみです。
android:fromXDeltaおよびandroid:toXDeltaの二つの属性はそれぞれ、アニメーションの開始座標と終了座標を表しています。
その他のパラメータについては、「Viewにアニメーションを付与する(Tweenアニメーション)」をご覧ください。
次に、styles.xmlファイルとthemes.xmlファイルを、それぞれvaluesフォルダ以下に作成します。
styles.xml
①act_open_enter_anim.xml
<?xml version="1.0" encoding="utf-8"?> <!--Activity1のフェードアウトのアニメーション--> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromXDelta="100%" android:toXDelta="0%" android:duration="300" android:fillAfter="true" android:fillEnabled="true"/> </set>
②act_open_exit_anim.xml
<?xml version="1.0" encoding="utf-8"?> <!--Activity2のフェードインのアニメーション--> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromXDelta="0%" android:toXDelta="-100%" android:duration="300" android:fillAfter="true" android:fillEnabled="true"/> </set>
(以下、Activity2がフォワード時に、バックキーでActivity2を終了した時のアニメーションを想定)
③act_close_enter_anim.xml
<?xml version="1.0" encoding="utf-8"?> <!--Activity1がフェードアウトから戻ってくる場合のアニメーション--> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromXDelta="-100%" android:toXDelta="0%" android:duration="300" android:fillAfter="true" android:fillEnabled="true"/> </set>
④act_close_exit_anim.xml
<?xml version="1.0" encoding="utf-8"?> <!--Activity2の終了時のアニメーション--> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <translate android:fromXDelta="0%" android:toXDelta="100%" android:duration="300" android:fillAfter="true" android:fillEnabled="true"/> </set>
それぞれのファイルの違いは、Android:~XDelta=””の部分のみです。
android:fromXDeltaおよびandroid:toXDeltaの二つの属性はそれぞれ、アニメーションの開始座標と終了座標を表しています。
その他のパラメータについては、「Viewにアニメーションを付与する(Tweenアニメーション)」をご覧ください。
次に、styles.xmlファイルとthemes.xmlファイルを、それぞれvaluesフォルダ以下に作成します。
styles.xml
<?xmlversion="1.0"encoding="utf-8"?> <resources> <stylename="Animation.Activity"parent="android:Animation.Activity"> <itemname="android:activityOpenEnterAnimation">@anim/act_open_enter_anim</item> <itemname="android:activityOpenExitAnimation">@anim/act_open_exit_anim</item> <itemname="android:activityCloseExitAnimation">@anim/act_close_exit_anim</item> <itemname="android:activityCloseEnterAnimation">@anim/act_close_enter_anim</item> </style> </resources>
themes.xml
<?xml version="1.0" encoding="utf-8"?></pre> <resources> <style name="slideAnim" parent="android:Theme"> <item name="android:windowAnimationStyle">@style/Animation.Activity</item> </style> </resources>
styles.xmlフォルダで、それぞれの要素にアニメーションを定義しています。
themes.xmlファイルで、windowAnimationStyle要素に、作成したアニメーションの定義を設定します。
マニフェストファイルへの定義
最後に、AndroidManifest.xmlファイルにて、アニメーションを設定したいActivityにthemeを定義します。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.jpn.techbooster.sample.ActivityanimSample" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".ActivityanimSample" android:label="@string/app_name" android:theme="@style/slideAnim"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".AcitivityanimSample2" android:theme="@style/slideAnim"> </activity> </application> <uses-sdk android:minSdkVersion="4" /> </manifest>
Activityの作成
なお今回サンプルとして作成したActivityのソースコードは以下の通りです。
ActivityanimSample画面にて指を左にフリックすると、アニメーションでActivityanimSample2に画面遷移を行うよう、シンプルに記述しています。
public class ActivityanimSample extends Activity { /** Called when the activity is first created. */ private float actDownX; private float actDownY; private float actUpX; private float actUpY; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public boolean onTouchEvent(MotionEvent event){ //左方向に指をスライドさせた場合に画面遷移 switch(event.getAction()){ case MotionEvent.ACTION_DOWN: actDownX = event.getX(); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: actUpX = event.getX(); if(actDownX - actUpX > 100){ Intent intent = new Intent(ActivityanimSample.this, AcitivityanimSample2.class); startActivity(intent); } break; } return false; } }
public class AcitivityanimSample2 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sub); } }