まずは半透明化
これは調べればすぐできるとは思いますが、<?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で半透明とアニメーションを両立させる方法があるのかもしれません。知ってる方は教えてくれるとうれしいです。
0 件のコメント:
コメントを投稿