补间动画知识点汇总
android的动画分为三大类:补间动画、帧动画、属性动画。
本篇主要介绍补间动画 后续会有其他动画的详细介绍
补间动画分类:
动画分类 | 简述 |
---|---|
TranslateAnimation | 移动补间动画 |
ScaleAnimation | 缩放补间动画 |
RotateAnimation | 旋转补间动画 |
AlphaAnimation | 透明补间动画 |
补间动画使用:
补间动画的使用通常有两种方式:XML属性定义 & Code中实例化。
TYPE | XML | CODE |
---|---|---|
动态改变动画形式 | × | √ |
多动画结合 | √ | √ |
XML中使用补间动画
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<!-- 透明度变化 -->
<alpha
android:fromAlpha="1"
android:toAlpha="0"
android:duration="2000"/>
<!-- 缩放与扩大 -->
<scale android:fromXScale="1.0"
android:toXScale="0"
android:fromYScale="1.0"
android:toYScale="0"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="true"
android:duration="2000"/>
<!-- 水平与垂直位移 -->
<translate
android:fromXDelta="0"
android:toXDelta="130"
android:fromYDelta="0"
android:toYDelta="-80"
android:duration="2000"/>
<!-- 旋转 -->
<rotate
android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"/>
</set>
↑ 在res/anim下新建 my_tween_anim.xml , 上图所实现的是4个效果混合之后的动画,最外层由set标签包裹。若单实现一种,直接将set标签删除,撸上自己需要的动画效果即可。
imgButton = findViewById("R.id.img")
imgButton.startAnimation(AnimationUtils.loadAnimation(this,R.anim.scale_shopcart));
↑ 从code中调用就比较简单了
View.startAnimation( Animation animation ) 控件开始动画;
AnimationUtils.loadAnimation( Context context ,@AnimRes int id );
code中使用补间动画
//实例化动画
Animation animationTrans = new TranslateAnimation(0,50,0,50); //位移动画
Animation animationScale = new ScaleAnimation(0f,1f,0f,1f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);//缩放动画
//剩余动画就不一一列举了,下方会有参数的详解......
//使用动画集合
AnimationSet animationSet = new AnimationSet(true);
animationSet.addAnimation(animationTrans);
animationSet.addAnimation(animationScale );
//控件开始动画
imgButton = findViewById("R.id.img")
imgButton.startAnimation(AnimationUtils.loadAnimation(this,R.anim.my_tween_anim));
补间动画常用构造函数参数介绍:
- TranslateAnimation
Added in API level 1
TranslateAnimation (float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
参数解析
参数名称 | 说明 |
---|---|
fromXDelta | float: 在动画的开始X坐标的变化 |
toXDelta | float: 在动画的结束X坐标的变化 |
fromYDelta | float: 在动画的开始Y坐标的变化 |
toYDelta | float: 在动画的结束Y坐标的变化 |
- ScaleAnimation
Added in API level 1
ScaleAnimation (float fromX, float toX, float fromY, float toY)
参数解析
参数名称 | 说明 |
---|---|
fromX | float: 在动画的开始水平扩展 |
toX | float: 在动画的结束水平扩展 |
fromY | float: 在动画的开始垂直扩展 |
toY | float: 在动画的结束垂直扩展 |
- RotateAnimation
Added in API level 1
RotateAnimation (float fromDegrees, float toDegrees)
参数解析
参数名称 | 说明 |
---|---|
fromDegrees | float:在动画的开始时旋转的起始角度 |
toDegrees | float: 在动画的结束时旋转的终止角度 |
- RotateAnimation (float fromDegrees,
float toDegrees,
int pivotXType,
float pivotXValue,
int pivotYType,
float pivotYValue)
参数解析
参数名称 | 说明 |
---|---|
fromDegrees | float: 在动画的开始时旋转的起始角度 |
toDegrees | float:在动画的结束时旋转的终止角度 |
pivotXType | int: 旋转中心的x轴取值参照方式 Animation.RELATIVE_TO_SELF, or Animation.RELATIVE_TO_PARENT. |
pivotXValue | float: 中心点x轴的取值 1.0 is 100% |
pivotYType | int: 旋转中心的y轴取值参照方式 Animation.RELATIVE_TO_SELF, or Animation.RELATIVE_TO_PARENT. |
pivotYValue | float: 中心点y轴的取值 1.0 is 100% |
- AlphaAnimation
Added in API level 1
AlphaAnimation (float fromAlpha, float toAlpha)
参数解析
参数名称 | 说明 |
---|---|
fromAlpha | float: 在动画的开始时透明度 1.0 为全透明 0.0 为不透明 |
toAlpha | float: 在动画的结束时透明度 1.0 为全透明 0.0 为不透明 |
补间动画的扩展:
插值器
插值器是描述动画执行中的变化的控制器
动画可先快后慢,先慢后快,多次执行……具体在下方
种类
参数名称 | 说明 |
---|---|
acceleratedecelerateinterpolator | 一个插入器的速度变化缓慢开始和结束但加速通过中间。 |
accelerateinterpolator | 一个插入器变化的速度开始缓慢,然后加速。 |
anticipateinterpolator | 一个插入器的变化开始后退然后前进。 |
anticipateovershootinterpolator | 一个插入器,开始后退然后前进和变化超过目标值,最后回到最后的价值。 |
baseinterpolator | 抽象类是扩展默认情况下插入器。 |
bounceinterpolator | 一个插入器,反弹结束时的变化。 |
cycleinterpolator | 重复动画为指定数量的周期。 |
decelerateinterpolator | 一个插入器,变化的速度开始快,然后减慢。 |
fastoutlinearininterpolator | 插入器对应fast_out_linear_in。 |
fastoutslowininterpolator | 插入器对应fast_out_slow_in。 |
linearinterpolator | 一个插入器,变化的速度是恒定的 |
linearoutslowininterpolator | 插入器对应linear_out_slow_in。 |
overshootinterpolator | 一个插入器的变化将向前和过激的最后一个值然后回来。 |
pathinterpolator | 一个插入器,可以遍历路径扩展从(0,0)点(1,- 1)。 |
使用
XML:
android:interpoplator="@android:anim/accelerate_interpoplator"
CODE:
mAnimatorSet.setInterpolator(xxxxxx);