16

アクティビティの開く/閉じる/入る/終了するアニメーションを変更するテーマがあります。

<style name="down_up_theme" parent="Theme.rtlfr">
    <item name="android:windowAnimationStyle">@style/down_up_animation</item>
</style>

<style name="down_up_animation" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_top</item>
    <item name="android:activityOpenExitAnimation">@anim/hold</item>
    <item name="android:activityCloseEnterAnimation">@anim/hold</item>
    <item name="android:activityCloseExitAnimation">@anim/slide_out_bottom</item>
</style>

そしてマニフェストで:

<activity android:name=".activity.ArticlesActivity"
        android:theme="@style/down_up_theme" />

目標は、アクティビティコンテンツを開始時に下にスライドさせ、終了時に上にスライドさせることです。

アニメーションは2.3で正常に動作します。ただし、4.0では、終了アニメーション(上にスライド)は機能しません。それがアニメーション化するのは、このアクティビティから生成されたアクティビティの終了です。私の場合、記事のリストを使用してアクティビティの終了をアニメーション化したいのですが、代わりに記事の詳細の終了にはスライドアップアニメーションがあります。

アニメーション化するアクティビティを生成するアクティビティに終了アニメーションを追加しようと試みることもできると思いますが、実際には、異なるアニメーションを持つ必要のあるアクティビティを生成します。また、この2.3と4.0の違いに関する情報もドキュメントに見つかりませんでした。

4.0でアニメーションを機能させるにはどうすればよいですか?

4

4 に答える 4

43

テーマに設定された終了アニメーションがICS+で機能しない理由はわかりませんが、呼び出しoverridePendingTransition()は機能しているようです。これを行う最も簡単な方法は、おそらくfinish()アクティビティでオーバーライドすることです。

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}
于 2012-09-13T15:08:42.927 に答える
10

この答えに少しだけ追加したいと思います。オーバーライドアニメーションソリューションは正常に機能しますが、アニメーションをハードコーディングしたくない場合があります。他のバージョンのプラットフォームの場合と同じように、マニフェストからそれらを取得すると便利です。

アクティビティにいくつかのメンバーフィールドを追加して、アクティビティに添付されたアニメーションのIDを保持します。

protected int activityCloseEnterAnimation;
protected int activityCloseExitAnimation;

そしてあなたのonCreateのどこか...

// Retrieve the animations set in the theme applied to this activity in the
// manifest..
TypedArray activityStyle = getTheme().obtainStyledAttributes(new int[] {android.R.attr.windowAnimationStyle});
int windowAnimationStyleResId = activityStyle.getResourceId(0, 0);      
activityStyle.recycle();

// Now retrieve the resource ids of the actual animations used in the animation style pointed to by 
// the window animation resource id.
activityStyle = getTheme().obtainStyledAttributes(windowAnimationStyleResId, new int[] {android.R.attr.activityCloseEnterAnimation, android.R.attr.activityCloseExitAnimation});
activityCloseEnterAnimation = activityStyle.getResourceId(0, 0);
activityCloseExitAnimation = activityStyle.getResourceId(1, 0);
activityStyle.recycle();

次に、アクティビティが終了する/アニメーションを適用する必要がある場所には、次のものが含まれます...

overridePendingTransition(activityCloseEnterAnimation, activityCloseExitAnimation);

また、アクティビティは、マニフェストのアクティビティに添付されたテーマ/スタイルで設定したアニメーションを正しく尊重する必要があります。

于 2012-11-14T21:51:44.913 に答える
1

私もこの問題に戸惑いました。しかし幸いなことに、すぐに答えが何であるかを見つけました。ルート要素が「設定」されているかどうかをアニメーションファイルで確認する必要があります。そうでない場合は、「Set」要素でラップする必要があります。そうすれば、ActivityCloseAnimation属性が正常に機能します。私はそれを試しました。それがあなたを助けることができることを願っています。

于 2016-08-29T06:57:43.037 に答える
0

ここを見て、 overridePendingTransitionwindowEnterAnimation/windowExitAnimationを使用してください。

于 2013-08-21T02:25:40.963 に答える