Android View 动画框架

Animation框架定义了透明度、旋转、缩放和位移几种常见的动画,而且控制的是整个View,实现原理是每次绘制视图时View所在的ViewGroup中的drawChild函数获取该View的Animation的Transformation值,然后调用canvas.concat(transformToApply.getMatrix()),通过矩形运算完成动画帧。如果动画没有完成,就继续调用invalidate()函数,启动下次绘制来驱动动画,从而完成整个动画的绘制。

视图动画使用简单,效果丰富,它提供了AlphaAnimation、RotateAnimation、TranslateAni-mation、ScaleAnimation四种动画方式,并提供了AnimationSet动画集合,混合使用多种动画。在Android3.0之前,视图动画一家独大,但随着Android3.0之后的属性动画框架推出,它的风光就大不如前了。相比属性动画,视图动画的一个非常大的缺陷就是不具备交互性,当某个元素发生视图动画后,其相应事件的位置还依然在动画前的地方,所以视图动画只能做普通的动画效果,避免交互的发生。但是它的优点也非常明显,即效率比较高且使用方法。

下面这个实例就列举了一些简单的视图动画的使用方法。

● 透明度动画

为视图增加透明度的变化动画。

        AlphaAnimation aa = new AlphaAnimation(0,1);
        aa.setDuration(1000);
        view.startAnimation(aa);

● 旋转动画

为视图增加旋转的变换动画。

        RotateAnimation ra = new RotateAnimation(0,360,100,100);
        ra.setDuration(1000);
        view.startAnimation(ra);

其参数分别为旋转的起始角度和旋转中心的坐标。当然,可以通过设置参数来控制旋转动画的参考系,代码如下所示(这里设置旋转参考系为自身中心点)。

        RotateAnimation ra = new RotateAnimation(0,360,
        RotateAnimation.RELATIVE_TO_SELF,0.5F,
        RotateAnimation.RELATIVE_TO_SELF,0.5F);

● 位移动画

为视图移动时增加位移动画。

        TranslateAnimation ta = new TranslateAnimation(0,200,0,300);
        ta.setDuration(1000);
        view.startAnimation(ta);

● 缩放动画

为视图的缩放增加动画效果。

        ScaleAnimation sa = new ScaleAnimation(0,2,0,2);
        sa.setDuration(1000);
        view.startAnimation(sa);

与旋转动画一样,缩放动画也可以设置缩放的中心点,代码如下所示(这里的参数效果与前面设置的的旋转中心为自身中心效果相同)。

        ScaleAnimation sa = new ScaleAnimation(0,1,0,1, 
        Animation.RELATIVE_TO_SELF,0.5F, 
        Animation.RELATIVE_TO_SELF,0.5F);
        sa.setDuration(1000);
        surfaceviewtemplate.startAnimation(sa);

● 动画集合

通过AnimationSet,可以将动画组合的形式展示出来:

        AnimationSet as = new AnimationSet(true);
        as.setDuration(1000);
        
        AlphaAnimation aa = new AlphaAnimation(0,1);
        aa.setDuration(1000);
        as.addAnimation(aa);
        
        TranslateAnimation ta = new TranslateAnimation(0,100,0,200);
        ta.setDuration(1000);
        as.addAnimation(ta);
        
        surfaceviewtemplate.startAnimation(as);

程序运行效果如图(1)所示。

                                                                                             图(1)视图动画

通过这个小实例,可以非常方便地了解各种视图动画的使用方法。

对于动画事件,Android也提供了对应的监听回调,要添加相应的监听方法,代码如下所示。

           animation.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {
                        
                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {

                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {

                    }
                });

通过这个监听回调,可以获取到动画的开始、结束、和重复事件,并针对相应的事件做出不同的处理。

通过前面的实例,可以发现视图动画的效果比较局限,而在这样一个对UI、交互需求越来越高的年的,视图动画注定会被更丰富的效果所取代。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值