当前位置:   article > 正文

Activity主流启动动画(超详细精髓版)_activity 动画

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" />
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

相关动画,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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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>
  • 1
  • 2
  • 3
  • 4
  • 5

好吧,名字是不太恰当的,这个忽略。我先观察了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);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

启动页增加:

 @Override
    protected int getAnimState() {
        return ANIM_SPLASH;
    }
  • 1
  • 2
  • 3
  • 4

主页增加:
@Override
protected int getAnimState() {
return ANIM_MAIN;
}

其他继承BaseActivity的可不用另外设置。
总结:
(1)启动动画实现随机要配置theme,主要两个方面:
a. android:windowContentOverlay为@null
b. 配置动画相关属性
(2)动画见上面(没贴的部分,可在git里面找到)
(3)Activity动画分为三种:启动页,主页以及其他页
这些都放入模仿的项目里面了。。。(原项目不是这样的,看到原项目后改装了启动动画,还没写完)
具体位置在:https://github.com/nfwuzhongdemeng/ImitateNBA

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/812833
推荐阅读
相关标签
  

闽ICP备14008679号