当前位置: 首页>移动开发>正文

Android kotlin 上下滑动式的出生年月日选择插件 kotlin 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://www.xamrdz.com/mobile/4ty1934660.html

相关文章: