概述
Activity启动动画相信大家都学过,无非可以加在两个地方,一个是style中,一个是activity中,但是通过开源项目SpintNBA,我发现启动图是可以随机的,贴一下我的修改后的style.xml:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">true</item>
<item name="windowNoTitle">true</item>
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@android:color/transparent</item>
<item name="android:windowAnimationStyle">@style/SlideRightAnimation</item>
<item name="android:windowNoTitle">true</item>
<item name="android:actionMenuTextColor">@android:color/white</item>
</style>
<style name="SlideRightAnimation" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/slide_down_in</item>
<item name="android:activityOpenExitAnimation">@null</item>
<item name="android:activityCloseEnterAnimation">@null</item>
<item name="android:activityCloseExitAnimation">@anim/slide_down_out</item>
<item name="android:taskOpenEnterAnimation">@anim/slide_down_in</item>
<item name="android:taskOpenExitAnimation">@null</item>
<item name="android:taskCloseEnterAnimation">@null</item>
<item name="android:taskCloseExitAnimation">@anim/slide_down_out</item>
<item name="android:taskToFrontEnterAnimation">@anim/slide_down_out</item>
<item name="android:taskToFrontExitAnimation">@null</item>
<item name="android:taskToBackEnterAnimation">@null</item>
<item name="android:taskToBackExitAnimation">@anim/slide_down_out</item>
</style>
<style name="toolbarStyle" parent="Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
<!--第一页样式-->
<style name="Theme_FullScreen" parent="AppTheme">
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
相关动画,slide_down_in.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="200"
android:fromYDelta="50%p"
android:toYDelta="0"
android:fromXDelta="50%p"
android:toXDelta="0"
/>
<scale
android:duration="200"
android:fromXScale= "0.0"
android:toXScale= "1.0"
android:fromYScale= "0.0"
android:toYScale= "1.0"
android:pivotX= "50%"
android:pivotY= "50%" />
<alpha
android:fromAlpha= "0.0"
android:toAlpha= "1.0"
android:duration= "200"/>
</set>
slide_down_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="0" android:toYDelta="100%p"
android:duration="200"/>
</set>
好吧,名字是不太恰当的,这个忽略。我先观察了SpintNBA,发现了实现随机图最重要的是:
1.设置好android:windowContentOverlay
2.设置好上面style的动画相关属性
观察这个项目,不知道为何,它进入的动画从右到左给我的感觉似乎很不和谐,于是观察QQ阅读等主流Android应用,发现原来所有的主流App都是在启动页添加了一个动画的,但是时间很短,所以很多人没注意到,效果用文字描述,如下:
1.放大,从0到全部
2.位置移动,从中心到旁边
3.透明度?(这个看不出来,但还是加了,加不加都可以)
于是加入动画。
但是,请注意slide_down_in.xml,slide_down_out.xml这两个动画,并不适合全部地方。不相信的可以等到QQ启动完成后,再点击进入一个聊天界面,发现是侧滑;然后你按住home键,再点击应用启动,发现是直接出现的,所以,关于启动图,有三种情况:
1.ANIM_SPLASH 启动图出现->放大等效果
2.ANIM_MAIN启动页到主页->无动画。。。其实是有不动的动画,如果完全不加动画,下一个出现或退出的动画就看不到了
(如果不需要启动页,就不要这步并且把主页的做成第一种ANIM_SPLASH,就是QQ,微信未完全杀死时重启的效果)
3.ANIM_OHTER主页到其他页->进入:新右进,旧不动,返回:新右出,旧不动
于是设置了三种状态来判断(其中第一种已在style中设置,此处不设置覆盖即可)
BaseActivity设置如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
if (getAnimState()==ANIM_OHTER)
overridePendingTransition(R.anim.slide_right_in, R.anim.slide_no);
else if(getAnimState() == ANIM_MAIN)
overridePendingTransition(R.anim.slide_no_time, R.anim.slide_no_time);
super.onCreate(savedInstanceState);
setContentView(getChildView());
ActivityManager.getInstance().addActivity(this);
}
@Override
protected void onResume() {
super.onResume();
}
protected static final int ANIM_SPLASH = 1;
protected static final int ANIM_MAIN = 2;
protected static final int ANIM_OHTER = 3;
protected int getAnimState() {
return ANIM_OHTER;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
overridePendingTransition(R.anim.slide_no, R.anim.slide_right_out);
ActivityManager.getInstance().removeActivity(this);
}
return false;
}
@Override
protected void onDestroy() {
super.onDestroy();
overridePendingTransition(R.anim.slide_no, R.anim.slide_right_out);
ActivityManager.getInstance().removeActivity(this);
}
启动页增加:
@Override
protected int getAnimState() {
return ANIM_SPLASH;
}
主页增加:
@Override
protected int getAnimState() {
return ANIM_MAIN;
}
其他继承BaseActivity的可不用另外设置。
总结:
(1)启动动画实现随机要配置theme,主要两个方面:
a. android:windowContentOverlay为@null
b. 配置动画相关属性
(2)动画见上面(没贴的部分,可在git里面找到)
(3)Activity动画分为三种:启动页,主页以及其他页
这些都放入模仿的项目里面了。。。(原项目不是这样的,看到原项目后改装了启动动画,还没写完)
具体位置在:https://github.com/nfwuzhongdemeng/ImitateNBA
最后
以上就是纯真墨镜为你收集整理的Activity主流启动动画(超详细精髓版)的全部内容,希望文章能够帮你解决Activity主流启动动画(超详细精髓版)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复