我是靠谱客的博主 纯真墨镜,最近开发中收集的这篇文章主要介绍Activity主流启动动画(超详细精髓版),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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主流启动动画(超详细精髓版)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部