1,补间动画(Tween Animation)
-
a. 补间动画(支持四种类型:平移(Translate)、旋转(Rotate)、缩放(Scale)、不透明度(Alpha)。
-
b. 只是显示的位置变动,View的实际位置未改变,表现为View移动到其他地方,点击事件仍在原处才能响应。(这个是重点,比如你设了控件点击事件,动画结束后,你点你看到的控件位置,是不会响应的,点原来的位置可以响应,这就是补间动画只是显示位置变动,实际位置没有改变)
-
c. 组合使用步骤较复杂。
-
d. View Animation 也是指此补间动画。
2,代码实现补间动画:
【1】透明动画(AlphaAnimation)
//[1]创建一个透明动画 1.0代表完全不透明 0.0完全透明
AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);
//[2]设置动画执行的时长
aa.setDuration(2000);
//[3]设置动画执行重复次数
aa.setRepeatCount(1);
//[4]设置重复的模式
aa.setRepeatMode(Animation.REVERSE);
//[3]iv执行动画
iv.startAnimation(aa);
【2】旋转动画(RotateAnimation)
// 创建旋转动画
// RotateAnimation ra = new RotateAnimation(0, 360);
// 0.5f代表当前控件宽*0.5
// Animation.RELATIVE_TO_SELF 相对于自身
RotateAnimation ra = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// [2]设置动画执行的时长
ra.setDuration(2000);
// [3]设置动画执行重复次数
ra.setRepeatCount(1);
// [4]设置重复的模式
ra.setRepeatMode(Animation.REVERSE);
// [3]iv执行动画
iv.startAnimation(ra);
【3】缩放动画(ScaleAnimation)
// 缩放(放大 缩小)1.0默认 3.0f是大三倍。
ScaleAnimation sa = new ScaleAnimation(1.0f, 3.0f, 1.0f, 3.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// [2]设置动画执行的时长
sa.setDuration(2000);
// [3]设置动画执行重复次数
sa.setRepeatCount(1);
// [4]设置重复的模式
sa.setRepeatMode(Animation.REVERSE);
// [3]iv执行动画
iv.startAnimation(sa);
【4】位移动画(TranslateAnimation)
// 创建一个位移动画 最后一个参数 慎用整数
//RELATIVE_TO_PARENT 相对于父布局
TranslateAnimation ta = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
0, Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0.2f);
// [2]设置动画执行的时长
ta.setDuration(2000);
// 当动画执行完毕后 停留在结束位置
ta.setFillAfter(true);
// [3]iv执行动画
iv.startAnimation(ta);
【5】动画集合(AnimationSet) --- 使用 set.addAnimation(aa)添加开启动画
// [1]创建动画的合集
AnimationSet set = new AnimationSet(true);
// [1]创建一个透明动画 1.0代表完全不透明 0.0完全透明
AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);
// [2]设置动画执行的时长
aa.setDuration(2000);
// [3]设置动画执行重复次数
aa.setRepeatCount(1);
// [4]设置重复的模式
aa.setRepeatMode(Animation.REVERSE);
RotateAnimation ra = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// [2]设置动画执行的时长
ra.setDuration(2000);
// [3]设置动画执行重复次数
ra.setRepeatCount(1);
// [4]设置重复的模式
ra.setRepeatMode(Animation.REVERSE);
ScaleAnimation sa = new ScaleAnimation(1.0f, 3.0f, 1.0f, 3.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
// [2]设置动画执行的时长
sa.setDuration(2000);
// [3]设置动画执行重复次数
sa.setRepeatCount(1);
// [4]设置重复的模式
sa.setRepeatMode(Animation.REVERSE);
TranslateAnimation ta = new TranslateAnimation(
Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
0, Animation.RELATIVE_TO_PARENT, 0,
Animation.RELATIVE_TO_PARENT, 0.2f);
// [2]设置动画执行的时长
ta.setDuration(2000);
// 当动画执行完毕后 停留在结束位置
ta.setFillAfter(true);
// 往动画合集里面添加动画
set.addAnimation(aa);
set.addAnimation(ra);
set.addAnimation(sa);
set.addAnimation(ta);
//执行动画
iv.startAnimation(set);