0
模仿必应开屏淡入淡出缩放动画
Maybe 发表于 2020-05-14 13:05 168

首先在res目录下新建一个anim,然后准备两个动画xml,一个淡出、一个淡入,为了大家更好的Ctrlcv就把涉及代码贴出来了

 <alpha
	//这个是淡出动画
        android:duration="1000"
        android:fromAlpha="1.0"
        android:toAlpha="0.0"
        android:interpolator="@android:anim/linear_interpolator"/>
<alpha
	//这个是淡入动画	
        android:duration="1000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0"
        android:interpolator="@android:anim/linear_interpolator"/>

两个动画都采用了线性匀速变化,这样看起来可以更平滑一些,其他的变化属性可以看下面代码选择

android:interpolator="@android:anim/accelerate_interpolator" 设置动画为加速动画(动画播放中越来越快)  
  
android:interpolator="@android:anim/decelerate_interpolator" 设置动画为减速动画(动画播放中越来越慢)  
  
android:interpolator="@android:anim/accelerate_decelerate_interpolator" 设置动画为先加速在减速(开始速度最快 逐渐减慢)  
  
android:interpolator="@android:anim/anticipate_interpolator" 先反向执行一段,然后再加速反向回来(相当于我们弹簧,先反向压缩一小段,然后在加速弹出)  
  
android:interpolator="@android:anim/anticipate_overshoot_interpolator" 同上先反向一段,然后加速反向回来,执行完毕自带回弹效果(更形象的弹簧效果)  
  
android:interpolator="@android:anim/bounce_interpolator" 执行完毕之后会回弹跳跃几段(相当于我们高空掉下一颗皮球,到地面是会跳动几下)  
  
android:interpolator="@android:anim/cycle_interpolator" 循环,动画循环一定次数,值的改变为一正弦函数:Math.sin(2* mCycles* Math.PI* input)  
  
android:interpolator="@android:anim/linear_interpolator" 线性均匀改变  
  
android:interpolator="@android:anim/overshoot_interpolator" 加速执行,结束之后回弹 

然后我们去styles里面自定义一个自己的主题

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowAnimationStyle">@style/fade</item>
    </style>

    <style name="fade" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/fade_in</item>
        <item name="android:activityOpenExitAnimation">@anim/fade_out</item>
        <item name="android:activityCloseEnterAnimation">@anim/fade_in</item>
        <item name="android:activityCloseExitAnimation">@anim/fade_out</item>
    </style>

activityOpenEnterAnimation-->当打开一个新活动时,动画在下一个活动(正在进入的)上运行,我们设置淡入anim

activityOpenExitAnimation-->当打开一个新活动时,动画在下一个活动(正在退出的)上运行,我们设置淡出anim

为了看着更平滑些,我们把关闭时的也设置一下

·

然后再去mainfest里面配置一下,假如涉及到a和b的淡入淡出就在这两个activity后面加入android:theme="@style/MyTheme"。。

<activity android:name=".SplashActivity"
            android:theme="@style/MyTheme"/>

<activity android:name=".MainActivity"
            android:theme="@style/MyTheme"/>

实现了淡入淡出之后,还需要把淡入activity的背景进行一个缩小动画,这个很简单

 <scale
        android:duration="3000"
        android:fromXScale="1.3"
        android:fromYScale="1.3"
        android:pivotY="50%"
        android:pivotX="50%"
        android:toXScale="1.0"
        android:toYScale="1.0"/>

然后在淡入activity的onCreate方法为设置了背景图片的控件设置一个动画

Animation main_bg_anim=AnimationUtils.loadAnimation(this,R.anim.main_bg_anim);
mRootLayout.setAnimation(main_bg_anim);

这样就实现了必应的开屏效果了

评论
0/240
  • 拉大锯
    10分钟后我更新一个上传gif图吧,不过有个限制,得1M以内。
    2020-05-14 17:07  回复
    1153952789488054272
    • Maybe  回复 @2020-05-14 17:07
      我感觉有没有都行了哈哈,关键是代码
      Maybe 2020-05-14 17:07   回复 1219157891760525312
    • 拉大锯  回复 @Maybe
      如果这样子的话,也只是你自己看。别人打开就是关闭。你写这东西意义也就只限于你自己了。
      拉大锯 2020-05-14 17:07   回复 1153952789488054272
    • Maybe  回复 @拉大锯
      我晚点再搞一个上来,先把学校作业写了,hah
      Maybe 2020-05-14 17:07   回复 1219157891760525312
    • Maybe  回复 @拉大锯
      难到我了,这gif搞出来2.7mb.emm
      Maybe 2020-05-14 17:07   回复 1219157891760525312
    • 拉大锯  回复 @Maybe
      我搞个时间改到3M吧,1M的确有点小。
      拉大锯 2020-05-14 17:07   回复 1153952789488054272
文章目录