Activity跳转动画(一)

Activity跳转动画(二)

记录Activity跳转动画的基本操作

项目源码地址 https://github.com/TaciturnKnight/AndroidAnimatorDemo

首先来看下效果

要实现这个效果很简单,只要在startActivity方法和finish方法之后调用overridePendingTransition方法即可

下面上代码

var intent: Intent = Intent(mContext, SimpleAnimActivity::class.java)
startActivity(intent)
overridePendingTransition(R.anim.start_activity_in, R.anim.start_activity_out)

复制代码
override fun finish() {
        super.finish()
        overridePendingTransition(R.anim.finish_activity_in, R.anim.finish_activity_out)
 }
复制代码

对了,因为最近在学习kotlin,所以代码全部采用kotlin的语法,就当练练手,因为是初学,欢迎会kotlin的大神指点代码缺陷和语法错误。看不懂的童鞋可以去看一下kotlin的语法。毕竟java已经告赢了我们大谷歌,kotlin开发绝对是趋势,现在大厂都已经在用kotlin开发了。所以学一学还是好处很大滴。推荐一个api文档http://www.kotlindoc.cn/Basics/Basic-Types.html

扯远了……继续说咱们的跳转动画。 从代码可以看到,这个overridePendingTransition要传两个参数,都是int类型,就是两个动画的资源id,那这两个动画都是干啥用的呢

首先说在startActivity的时候调用的方法

仔细看一下上面的动画效果,其实启动activity时的动画可以分为两个,一个是当前activity向左移动了一段距离,另一个是新的activity从屏幕右侧移动到屏幕左侧,这就是这两个参数的意义:

一个参数表达当前activity移出时的动画,另一个参数表达新的activity进入的动画

来看一下这个方法的参数名

public void overridePendingTransition(int enterAnim, int exitAnim)

第一个参数叫enterAnim

enter是进入的意思,所以第一个参数为新的activity进入时的动画

第二个参数叫exitAnim

exit是退出的意思,所以第二个参数为当前activity移出时的动画

同理,在finish时可以看做当前activity移出,上一级activity进入

所以在finish时,第一个参数为上一级activity进入时的动画,第二个参数为当前activity移出时的动画

好,现在我们搞清楚了这个方法的参数的意义,下面就来说说这几个动画要怎么写

还是先上代码 先来看start_activity_in

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="100%"
        android:toXDelta="0%" />
</set>
复制代码

我们要用的就是translate标签和几个属性,那这几个属性是什么意思呢

duration : 动画执行的时间 fromXDelta : activity在X轴移动时的起点,100%代表起点在屏幕右侧 toXDelta : activiy在X轴移动时的终点,0%就代表终点在屏幕左侧

所以,上边这个动画代表的意思就是,一个activity从屏幕右侧开始,移动到屏幕左侧,耗时500毫秒,观察上面的效果图,这个过程描述的就是启动一个新的activity时,新的activity进入的效果

那activity移出时的动画该怎么描述呢

下面看start_activity_out

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="0%"
        android:toXDelta="-20%" />
</set>
复制代码

这个动画描述的就是一个activity从屏幕左侧开始,向左移动屏幕宽度20% 当然,我们也可以传-100%,这样的效果看上去就像新的activity把现在的activity挤出去一样 这样在启动activity的时候,传入这两个动画,我们就实现了图片里启动的效果了。注意理解和区分两个参数的概念,不要搞反了

同样,在finish的时候,进入的activity要从-20%移动到0%,移出的要从0%移动到100%,其实就是把start时的动画里的from和to反过来。 finish_activity_in

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="-20%"
        android:toXDelta="0%" />
</set>
复制代码

finish_activity_out

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="500"
        android:fromXDelta="0%"
        android:toXDelta="100%" />
</set>
复制代码

当然这样做出来的效果感觉就是从哪来的回哪去,我们也可以随意设定百分比的值。 #扩展 上述动画只实现了activity沿x轴平移的效果,其实还有很多其他的标签和属性可以设置出不同的效果,比如:

y轴平移

<translate
        android:duration="500"
        android:fromYDelta="-30%"
        android:toYDelta="0%" />
复制代码

y轴和x轴同时平移

<translate
        android:duration="500"
        android:fromXDelta="-30%"
        android:fromYDelta="-30%"
        android:toXDelta="0%"
        android:toYDelta="0%" />
复制代码

放大缩小

<scale
        android:duration="@integer/anim_duration"
        android:fromXScale=".1"
        android:fromYScale=".1"
        android:pivotX="100%"
        android:pivotY="100%"
        android:toXScale="1"
        android:toYScale="1" />
复制代码

当然,也可以两个动画组合使用

x轴平移的同时 放大缩小

<translate
        android:duration="@integer/anim_long_duration"
        android:fromXDelta="0%"
        android:toXDelta="-30%" />
    <scale
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:toXScale=".5"
        android:toYScale=".5"
        android:pivotY="50%"
        android:pivotX="50%"
        android:duration="@integer/anim_long_duration"/>
复制代码

小结

在startActivity和finish方法之后调用overridePendingTransition方法,传入你想要的移出和进入动画,这就是Activity跳转动画的基本操作**

但是这样我们会发现一个问题,项目里有很多Activity,难道要在每个启动Activity的地方都要加上这个方法吗? 当然不是,我们可以全局配置统一的动画跳转效果 首先来到清单文件

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
复制代码

进入theme属性的style文件里

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!-- 设置所有activity跳转动画 -->
        <item name="android:windowAnimationStyle">@style/translucent_style</item>
    </style>

    <style name="translucent_style" parent="@android:style/Animation">
        <!--  启动时的进入和移出  -->
        <item name="android:activityOpenEnterAnimation">@anim/start_activity_in</item>
        <item name="android:activityOpenExitAnimation">@anim/start_activity_out</item>
        <!--  finish时的进入和移出  -->
        <item name="android:activityCloseEnterAnimation">@anim/finish_activity_in</item>
        <item name="android:activityCloseExitAnimation">@anim/finish_activity_out</item>
    </style>
</resources>
复制代码

这样设置之后,我们正常调用startActivity和finish就会自动采用此处配置的动画。当然你如果想单独设置某个activity的跳转效果,使用overridePendingTransition是可以覆盖这个效果的,这样就很方便了

项目源码地址 https://github.com/TaciturnKnight/AndroidAnimatorDemo

以上就是Activity跳转动画的基本操作,喜欢的朋友点点关注 欢迎大神指出缺陷和不足,互相学习,共同进步

转载于:https://juejin.im/post/5b3dc6645188251acd0f07af

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值