4

カスタム アニメーション (スライド アップとスライド ダウン) でテーマを作成しました。アニメーションは、古いバージョンの Android では問題なく動作します。ただし、Android 4.0 (ICS) で試してみると、閉じるときのアニメーションが動作しません。ICS ではスライド アップ アニメーションのみが正常に動作します。

アニメーションに使用するテーマは次のとおりです。

<style name="myTheme" parent="android:Theme.Black">
    <item name="android:windowTitleSize">45dip</item>
    <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
    <item name="android:windowAnimationStyle">@style/myTheme.Window</item>
</style>

<style name="myTheme.Window" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/push_up_in_no_alpha</item>
    <item name="android:activityOpenExitAnimation">@anim/no_anim</item>
    <item name="android:activityCloseEnterAnimation">@anim/no_anim</item>
    <item name="android:activityCloseExitAnimation">@anim/push_down_out_no_alpha</item>
</style>

そして、ここにpush_down_out_no_alpha.xmlがあります:

<set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromYDelta="0" android:toYDelta="100%p"
        android:duration="@android:integer/config_longAnimTime"/>
</set>

コードでアニメーションを設定すると、ICS でも正常に動作しますが、テーマとしてはなぜですか?

 this.overridePendingTransition(R.anim.no_anim,R.anim.push_down_out_no_alpha);

Android 4.0 (ICS) で動作しない理由を知っている人はいますか?

4

2 に答える 2

5

マニフェストからのアニメーションの指定は ICS では壊れているようです :-( オーバーライド アニメーション ソリューションは問題なく動作しますが、おそらくアニメーションをハードコーディングしたくないでしょう。プラットフォームのバージョン..そう....

アクティビティに添付されたアニメーションの 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-14T23:20:29.050 に答える
2

私も試しましたが、ここでは機能しません。何が問題なのかわかりませんが、this.overridePendingTransition(R.anim.no_anim,R.anim.push_down_out_no_alpha);このコードは正常に動作しています

于 2012-09-14T07:13:20.807 に答える