まずは半透明化
これは調べればすぐできるとは思いますが、<?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="translucent_background">#88000000</drawable> <style name="Style.translucent" parent="android:style/Theme.Translucent"> <item name="android:windowBackground">@drawable/translucent_background</item> </style> </resources>こんな感じのを作って、ManifestでActivityのThemeに設定するだけです。
アニメーションはThemeにはしない
いろいろ検索してみた結果、Activtyにアニメーションをつけるとき、<style name="Style.Alpha" parent="android:Animation.Activity"> <item name="android:activityOpenEnterAnimation">@anim/activity_fadein</item> <item name="android:activityOpenExitAnimation">@anim/activity_fadeout</item> <item name="android:activityCloseEnterAnimation">@anim/activity_fadein</item> <item name="android:activityCloseExitAnimation">@anim/activity_fadeout</item> </style>こんな感じのを作ってThemeに設定するのが主流のようですが、上記ではなくまた別の方法を使います。
とりあえずはanimationの作成です。今回はフェードイン・アウトで。
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator"> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="700" android:fillAfter="true" android:fillEnabled="true"/> </set>フェードアウトはコレのfromAlphaとtoAlphaの値を入れ替えたものをもう一つ作成。
そして、アニメーションさせたいActivityのコードに少し付け足します。
- package, import部省略 - public class Activity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); overridePendingTransition(R.anim.activity_fadein, R.anim.activity_fadeout); } @Override public void onPause() { super.onPause(); overridePendingTransition(R.anim.activity_fadein, R.anim.activity_fadeout); } }注目するのは7行目と13行目です。
overridePendingTransition に、先ほど作成したAnimationを指定しています。
onCreateの時に実行すると、フェードイン(第一引数)のアニメーションが実際に動き、
onPauseの時に実行すると、フェードアウト(第二引数)のアニメーションが実際に動くようです。
つまり、7行目の「R.anim.activity_fadeout」と、
13行目の「R.anim.activity_fadein」はおそらく意味がありません(笑)
なので、それぞれ「0」でも結構です(未検証)。
おわりに
もしかしたらThemeで半透明とアニメーションを両立させる方法があるのかもしれません。知ってる方は教えてくれるとうれしいです。