示例2:百分比Pivot
使用百分比确定Pivot也很简单,那么Pivot的位置就是:以View的左上角即(0,0)点为基础加上View特定的宽高百分比。
<?xml version="1.0" encoding="utf-8"?>
示例3:父View百分比Pivot
<?xml version="1.0" encoding="utf-8"?>
这个计算和上边那个其实是一样的,只是基于的点不同而已,上边是基于自身来算起,那么这个则是基于View的父布局来计算的。那么Pivot的位置就是:以View的左上角即(0,0)点为基础加上父View特定的宽高百分比。
alpha动画
这个可以说就非常简单了,主要是实现颜色的过度效果,fromAlpha
则是动画开始的透明度,toAlpha
则是在动画最后显示的透明度。0.0代表完全透明1.0则是View的原色。
rotate(旋转) 动画
首先要想完成旋转要确定那些参数?肯定要确定旋转要围绕的点也就是pivot
,这个在scale
动画也用到了,用法都一样,不在多说。这里出现了名为degrees
也就是角度的概念,也就是以特定点(pivot
)为中心从多少度(fromDegrees
),旋转到多少度(toDegrees
)。以下示例是从0转到360度,正好一圈。
<rotate xmlns:android=“http://schemas.android.com/apk/res/android”
android:fromDegrees=“0”
android:toDegrees=“360”
android:pivotY=“50%”
android:pivotX=“50%”
android:duration=“3000”
translate(位移) 动画
说白了就是移动View的位置,就是从一个点移动到另一个点,最重要的就是确定两个点,那么则需要确定两对X,Y坐标了。以下参数的使用方式和在最上边提到的pivot
是一样的都可以使用精确值和百分比。
其中黑色线条框住的是View的原始位置,黄色框住的是View动画开始时的位置,紫色线条则是整个View的70%的占比,最后集中到的点就是View要移动到的最终的位置也就是结束点。
Set(集合动画)
如何理解Set
(集合动画),其实很简单,比如现在有一个需求,我们既要旋转又要有渐渐出现的效果,那么就要使用set
了,说白了就是将多个动画组合起来。只要把上边几个都学会了,使用这个set
简直so easy。
<alpha
a
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
ndroid:fromAlpha=“0.0”
android:toAlpha=“1.0”
<rotate
android:pivotX=“50%”
android:pivotY=“50%”
android:fromDegrees=“0”
android:toDegrees=“180”
动态创建动画
上边所展示的都是通过xml文件写的动画,都是静态写好了的。那么想要动态的创建动画对象又该如何?其实很简单,通过代码的方式创建动画它们的名称和使用xml文件创建时名称都是对应的,提供的构造函数也都是必备的参数值。
//创建Alpha动画
var alpha = AlphaAnimation(0.0F, 1.0F)
alpha.duration = 3000
this.txtAnimation.startAnimation(alpha)
//创建Rotate动画
var rotate = RotateAnimation(0F, 360F, Animation.RELATIVE_TO_SELF, 50F, Animation.RELATIVE_TO_SELF, 50F)
//创建Scale动画
var scale = ScaleAnimation(0F, 1F, 0F, 1F, Animation.RELATIVE_TO_SELF, 50F, Animation.RELATIVE_TO_SELF, 50F)
//创建translate动画
var translate = TranslateAnimation(
Animation.RELATIVE_TO_SELF,
10F,
Animation.RELATIVE_TO_SELF,
80F,
Animation.RELATIVE_TO_SELF,
0F,
Animation.RELATIVE_TO_SELF,
70F
)
//创建Set动画
var set = AnimationSet(this, null)
set.duration = 3000
set.addAnimation(alpha)
set.addAnimation(rotate)
从Animation继承的属性
以上所有的动画对象都是从Animation类继承来的,所有有一些公共的属性也会继承过来。
动画的播放
//加载动画
this.btnOpenAnimation.setOnClickListener {
var animation = AnimationUtils.loadAnimation(this, R.anim.translate_anim)
this.txtAnimation.startAnimation(animation)
}
Tween Animation(逐帧动画)
这个是Drawable形式的动画,存放在drawable文件夹中,使用animation-list
节点来表示。图片素材是提前准备好的。自己动手尝试下马上就会理解了。
这里我们给一个TextView设置了background
属性。
具体调用
idth=“300dp” android:layout_height=“300dp”
android:layout_centerInParent=“true”
android:id="@+id/txtAnimation"
android:background="@drawable/anim_refresh"
android:layout_gravity=“center”
/>
具体调用