介绍
补间动画又可以分为四种形式,分别是 alpha(淡入淡出),translate(位移),scale(缩放大小),rotate(旋转)。
补间动画的实现,一般会采用xml 文件的形式;代码会更容易书写和阅读,同时也更容易复用。
使用
XML 实现
首先,在res/anim/ 文件夹下定义如下的动画实现方式
alpha.gifalpha_anim.xml 动画实现
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromAlpha="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toAlpha="0.0"
>
</alpha>
scale.gif
scale_anim.xml 动画实现
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0"/>
rotate.gif
rotate_anim.xml 动画实现
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromDegrees="0"
android:toDegrees="100"
android:pivotX="50"
android:pivotY="50"
/>
translate.gif
translate_anim.xml 动画实现
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXDelta="0"
android:toXDelta="200"
android:fromYDelta="0"
android:toYDelta="100"/>
开始动画
val loadAnimation = AnimationUtils.loadAnimation(this, R.anim.anim_alpha)
imageView.startAnimation(loadAnimation)
结束动画
imageView.clearAnimation()
属性介绍
android:drawable 需要进行旋转动画的图片
android:fromDegrees 旋转的起始点(旋转开始的角度)
android:toDegrees 旋转的结束点(旋转最终角度)
andoird:pivotX 旋转点的X值(距离左侧的偏移量)
android:pivotY 旋转点的Y值(距离顶部的偏移量)
android: visible 这个好理解,就是图片初始的显示状态
android:pivotX 与 android:pivotY 这两个属性值为float,可以给具体数也可以给百分比。比如你知道图片大小是100,你可以给(50,50)表示旋转中心点距图片左边50,右边50
android:interpolator:这个属性是用来设置转动速率的。
LinearInterpolator为匀速效果,Accelerateinterpolator为加速效果、DecelerateInterpolator为减速效果,
android:repeatCount 重复的次数,默认为0,必须是int,可以为-1表示不停止
android:duration属性表示从android:fromDegrees转动到android:toDegrees所花费的时间,单位为毫秒。可以用来计算速度。
android:startOffset 在调用start函数之后等待开始运行的时间,单位为毫秒,若为10,表示10ms后开始运行
android:repeatMode 重复的模式,默认为restart,即重头开始重新运行,可以为reverse即从结束开始向前重新运行。
在android:repeatCount大于0或为infinite时生效
android:detachWallpaper 表示是否在壁纸上运行
android:zAdjustment 表示被animated的内容在运行时在z轴上的位置,默认为normal。normal保持内容当前的z轴顺序top运行时在最顶层显示bottom运行时在最底层显示
java 实现
/*
* fromDegrees 开始角度
* toDegrees 结束角度
*/
private fun setRotateAnimation(fromDegrees: Float = 0f, toDegrees: Float = 360f) {
rotateAnimation = RotateAnimation(fromDegrees, toDegrees, 50f, 50f)
rotateAnimation.duration = 2000
rotateAnimation.apply {
fillAfter = cb_keep.isChecked //动画在播放结束时是否保持最终的状态
repeatCount = if (cb_loop.isChecked) { //动画的重复次数
0
} else {
-1
}
repeatMode = if (cb_reverse.isChecked) { //动画的重复方式
Animation.REVERSE //反转动画
} else {
Animation.RESTART //重新播放动画
}
}
imageView.startAnimation(rotateAnimation) //开始动画
}
Activity切换动画
Android使用Theme自定义Activity进入退出动画
<style name="Theme.AnimationTest" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
...
<item name="android:windowAnimationStyle">@style/myActivityOutEnterAnima</item>
</style>
<style name="myActivityOutEnterAnima" parent="@android:style/Animation.Activity">
<!-- 定义activity的进出场动画 -->
<item name="android:activityOpenEnterAnimation">@anim/right_in</item>
<item name="android:activityOpenExitAnimation">@anim/left_out</item>
<item name="android:activityCloseEnterAnimation">@anim/left_in</item>
<item name="android:activityCloseExitAnimation">@anim/right_out</item>
</style>
android:activityOpenEnterAnimation:指的是进入B时, B的动画。
android:activityOpenExitAnimation:指的是进入B时,A的动画,与B的动画是一起显示的。
android:activityCloseEnterAnimation:通过B跳转到C后,后退到B时,B的进入动画
android:activityCloseExitAnimation:通过B跳转到C后,后退到B时,C的退出动画'
网友评论