为了体验所以想统一调整应用的activity进出动画效果。通过设置一个style来设置。代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<style name="activity_theme" parent="@android:style/Theme">
<!-- 设置没有标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 设置activity切换动画 -->
<item name="android:windowAnimationStyle">@style/activity_Animation</item>
</style>
<!-- animation 样式 -->
<style name="activity_Animation" parent="@android:style/Animation.Activity">
<!-- 在该Activity中启动其他Activity时的进入者动画 -->
<item name="android:activityOpenEnterAnimation">@anim/activity_in_left</item>
<!-- 在该Activity中启动其他Activity时的退出者动画 -->
<item name="android:activityOpenExitAnimation">@anim/activity_out_left</item>
<!-- 从其他Activity返回至该Activity时的进入者动画 -->
<item name="android:activityCloseEnterAnimation">@anim/activity_in_right</item>
<!-- 从其他Activity返回至该Activity时的退出者动画 -->
<item name="android:activityCloseExitAnimation">@anim/activity_out_right</item>
</style>
然后在AndroidManifest.xml里面配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/activity_theme" >
<activity
android:name="com.example.androidtest.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="NextActivity" >
</activity>
</application>
到这里,任务完成了。
附:如果想针对某一个Activity做此操作的话,将 android:theme="@style/activity_theme" 移至标签中就可以了。(网上都能查得到,相应的动画自己写就行了。)
BUG来啦来啦。由于我们应用开发的时间较早,所以需要兼容4.0一下的手机版本,常见的一半都是2.2、2.3版本的手机,坑爹的事情来了,在这 些个手机上面动画全部无效,悲剧埃在手机动画设置把设置选项设置成全部动画也不行。
后来参考了这篇文章:http://www.cnblogs.com/Jaylong/archive/2012/08/30/activity.html, 依葫芦画瓢的把:
1
<style name="activity_Animation" parent="@android:style/Animation.Activity">
改成了:
1
<style name="activity_Animation" parent="@android:style/Animation">
再次运行,毫无变化,这尼玛揪心玩意儿。
再次检查自己的代码,发现anim文件里面的内容是这样的:
1
2
3
4
5
6
7
8
9
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator" >
<translate
android:duration="@android:integer/config_shortAnimTime"
android:fromXDelta="0%p"
android:toXDelta="100%p" />
</set>
猜会不会是 android:interpolator="@android:anim/accelerate_decelerate_interpolator"和 android:duration="@android:integer/config_shortAnimTime"这两个系统定义的文件不兼容的问题 呢。首改android:duration="@android:integer/config_shortAnimTime":
@android:integer/config_shortAnimTime改成源码里面看到的值150,变成了这样:
1
2
3
4
5
6
7
8
9
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_decelerate_interpolator" >
<translate
android:duration="150"
android:fromXDelta="0%p"
android:toXDelta="100%p" />
</set>
运行,OK。果然是这个原因。猜想可能是因为系统读不到这个属性就默认设成了0,导致动画运行的很快, 看不出来效果。这点android做得比较不智能了,至少给我默认个100毫秒吧,直接为0就太恶心了。。
这个故事到此应该结束了。。。
再附:
项目组的兄弟也遇到这个问题了。哈哈哈,加载网络资源之前的加载动画在2.2、2.3上面也动不了了,帧动画只显示了一郑跟上面描述的问题还不一样。
1
2
3
4
ImageView rocketImage = (ImageView) layout.findViewById(R.id.animation);
rocketImage.setBackgroundResource(R.drawable.progress_blue_animation);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();
稍微改动一下:
1
2
3
4
5
6
7
8
ImageView rocketImage = (ImageView) layout.findViewById(R.id.animation);
rocketImage.setBackgroundResource(R.drawable.progress_blue_animation);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketImage.post(new Runnable(){
public void run(){
rocketAnimation.start();
}
});
运行,成功,收工。
源码稍候研究,迫不及待发个博客,以免后面偷懒又不写了。
以上做个笔记以免忘记。