Animation视图动画

   Animation框架定义了透明度、旋转、缩放和位移几种常见的动画,控制的是整个view,实现的原理是每次绘制视图时View所在的ViewGroup中的drawChild函数获取该View的Animation的Transformation值,调用canvas.concat(trabnsformToApply.getMatrix()),通过矩阵运算完成动画帧。如果没有完成,就继续调用invalidate的函数,启动下次绘制来驱动动画,从而完成整个动画的绘制。
   视图动画效率比较高且使用方便,但是有一个非常大的缺陷就是不具备交互性,当某个元素发生视图动画后,其相应事件的位置还依然在动画的前的地方,所以视图动画只能做普通的动画效果避免交互的发生。

这里写图片描述

透明度动画:

AlphaAnimation aa = new AlphaAnimation(0.0f, 1.0f);//1.0表示完全不透明,0.0表示完全透明
aa.setDuration(1000);//动画持续时间
view.startAnimation(aa);

旋转动画:

RotateAnimation ra = new RotateAnimation(0,360,100,100);//初始角度,旋转角度,旋转中心x坐标,旋转中心y坐标
ra.setDuration(1000);
view.startAnimation(ra);

位移动画:

TranslateAnimation ta = new TranslateAnimation(0,200,0,300);//初始x坐标,位移后的x坐标,初始y坐标,位移后y坐标
ta.setDuration(1000);
view.startAnimation(ta);

缩放动画:

ScaleAnimation  sa  = new ScaleAnimation(0.0f,2.0f,0.0f,2.0f);//开始时x坐标的伸缩尺寸,结束时x坐标上的伸缩尺寸,开始时y坐标的伸缩尺寸,结束时y坐标上的伸缩尺寸;0.0f表示收缩到没有,1.0f表示正常大小无缩放
sa.setDuration(1000);
view.startAnimation(sa);

动画集合:

AnimationSet as = new AnimationSet(true);

AlphaAnimation aa = new AlphaAnimation(0,1);
aa.setDuration(1000);
as.addAnimation(aa);
TranslateAnimation ta = new TranslateAnimation(0,200,0,300);
ta.setDuration(1000);
as.addAnimation(ta);
RotateAnimation ra = new RotateAnimation(0,360,100,100);
ra.setDuration(1000);
as.addAnimation(ra);

view.startAnimation(as);

常用方法 :

animation.setRepeatCount(int repeatCount);//设置重复次数
animation.setFillAfter(boolean);//动画执行完后是否停留在执行完的状态
animation.setStartOffset(long startOffset);//执行前的等待时间 

视图动画监听回调:

animation.setAnimationListenter(new Animation.AnimationListener(){
 @Override
            public void onAnimationStart(Animation animation) {
               //动画开始
            }
            @Override
            public void onAnimationEnd(Animation animation) {
               //动画结束
            }
            @Override
            public void onAnimationRepeat(Animation animation) {
             //动画重复
            }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值