Luc*_*ano 4 animation android themes android-4.0-ice-cream-sandwich
我用自定义动画(向上和向下滑动)制作了一个主题。动画在较旧的 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>
Run Code Online (Sandbox Code Playgroud)
这是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>
Run Code Online (Sandbox Code Playgroud)
当我在代码中设置动画时,它在 ICS 上也能正常工作,但为什么不作为主题呢?
this.overridePendingTransition(R.anim.no_anim,R.anim.push_down_out_no_alpha);
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么它不能在 Android 4.0 (ICS) 上运行?
从清单中指定动画似乎在 ICS 中被破坏了 :-( 覆盖动画解决方案工作正常,但您可能不想对动画进行硬编码。从清单中获取它们会很好,就像其他平台的版本......所以......
向您的活动添加几个成员字段以保存附加到您的活动的动画的 ID。
protected int activityCloseEnterAnimation;
protected int activityCloseExitAnimation;
Run Code Online (Sandbox Code Playgroud)
并在您的 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();
Run Code Online (Sandbox Code Playgroud)
那么无论您的活动结束/应该应用动画的地方包括...
overridePendingTransition(activityCloseEnterAnimation, activityCloseExitAnimation);
Run Code Online (Sandbox Code Playgroud)
并且您的活动应该正确尊重您在清单中活动的主题/样式中设置的动画。
归档时间: |
|
查看次数: |
2769 次 |
最近记录: |