-
Notifications
You must be signed in to change notification settings - Fork 0
Android 动画
DawnSpring edited this page Jan 18, 2021
·
3 revisions
帧动画、补间动画、属性动画
每帧动画取决于UI资源,eg:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
<item
android:drawable="@drawable/s_1"
android:duration="100" />
<item
android:drawable="@drawable/s_2"
android:duration="100" />
<item
android:drawable="@drawable/s_3"
android:duration="100" />
</animation-list>
使用:
<ImageView
android:id="@+id/iv_frame_anim"
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginLeft="50dp"
android:layout_marginTop="200dp"
android:src="@drawable/frame_anim1"/>
//iv_frame_anim.setImageDrawable(resources.getDrawable(R.drawable.frame_anim1)) //setImageDrawable(R.drawable.frame_anim1)
var animationImag1Drawable = (iv_frame_anim.drawable as AnimationDrawable).also {
it.start()
}
淡入淡出(alpha)、translate、scale、rotate
在res/anim/(只能放在这!)文件夹下定义动画
<?xml version="1.0" encoding="utf-8"?>
<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"/>
//android:pivotX="50%"和android:pivotY="50%":以进行动画控件的左上角为原点坐标,
50%表示原点坐标加上自己宽度的 50%(即控件水平中心)作为起始点;
当属性值为数值,如 50 时,表示原点坐标加上 50px,作为起始点;
50%p 就是表示在原点坐标加上父控件宽度的 50% 作为起始点 x 轴坐标
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromAlpha="1.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:toAlpha="0.0"
/>
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:fromXDelta="0.0"
android:toXDelta="50%p"
android:fromYDelta="0.0"
android:toYDelta="50%p"/>
// 整型值:
fromXDelta 属性为动画起始时 X坐标上的位置
toXDelta 属性为动画结束时 X坐标上的位置
fromYDelta 属性为动画起始时 Y坐标上的位置
toYDelta 属性为动画结束时 Y坐标上的位置
注意:
没有指定,
默认是以自己为相对参照物
长整型值:
duration 属性为动画持续时间
说明: 时间以毫秒为单位
在这些属性里面还可以加上%和p,例如:
android:toXDelta="100%",表示自身的100%,也就是从View自己的位置开始。
android:toXDelta="80%p",表示父层View的80%,是以它父层View为参照的。
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="5000"
android:fromDegrees="0.0"
android:toDegrees="360.0"
android:pivotX="50%"
android:pivotY="50%"
/>
使用动画xml:
//补间动画
var animation = AnimationUtils.loadAnimation(activity, R.anim.translate_test)
//动画执行完毕后是否停在结束时的角度上!!!
animation.fillAfter = true;
iv_frame_anim.startAnimation(animation)