Android技术进阶的要素——Android属性动画

由于Android3.0之前就有了许多的动画框架,其中之一就是Animation,但是随着时代的发展和交互要求的提高,Animation的局限性也越来越明显,例如:Anmiation动画不能响应点击事件等等。因此,在Android3.0之后,Google推出了新的动画框架——属性动画(Animator)。

而在Animator框架中使用最多的就是AnimatorSet和ObjectAnimator的配合,使用ObjectAnimator进行更加精细化的控制,只控制一个对象的一个属性值,而使用多个ObjectAnimator组合到AnimatorSet形成一个动画。并且ObjectAnimator能够自动驱动,可以调用SetFrameDelay(longframeDelay)设置动画帧之间的间隙时间,调整帧率,减少动画过程中频繁的绘制界面,而在不影响动画效果的前提下减少了CPU的资源消耗。

接下来就看看属性动画中最基础的ObjectAnimator。

先看看基本的用法格式:

    private void oneObjectAnimator(View tv) {
        animator = ObjectAnimator.ofFloat(tv, "alpha", 300);
        animator.setDuration(300);
        animator.start();
    }

tv是一个控件,“alpha”是一个字符串格式的属性值,除了这个属性值,还有

translationY 、translationX :这两个属性作为一种增量来控制着View对象从布局容器的左上角坐标偏移的位置
rotation、rotationX、rotationY:控制View对象围绕支点进行2D和3D旋转。
scaleX、scaleY :控制View对象围绕支点进行2D缩放
prvotX、pivotY :控制控件围绕这个点进行缩放变换处理
x、y: 描述的是View对象在它的容器中的最终位置,它最初的左上角坐标和translationY 、translationX值的累积和。
alpha 控制透明度

这个是针对一个对象一个属性的用法,如果是有多个属性,那就要用到PropertyValuesHolder

比如现在要实现一个平移缩放的动画效果,那具体的做法就是:

    /**
     * 组合式动画,同一个对象的多个属性
     */
    public void threeObjectAnimator() {
        PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat(
                "translationX", 300f);

        PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("scaleX", 1f,
                0);
        PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("scaleY", 1f,
                0);
        ObjectAnimator.ofPropertyValuesHolder(tv, pvh1, pvh2, pvh3)
                .setDuration(1000).start();


    }

其实用法跟AnimationSet类似,同时,也跟我们后面要讲的AnimatorSet的用法类似。

接下来,再看看另外在属性动画里面占有很重要的地位的类——ValueAnimator

这个类其实相当强大,就连ObjectAnimator也是继承它的。它本身不带有动画效果,但是它能生成许多的有规律的数字,那么我们有了这个数字,当然也可以实现动画的效果了,比如下面的这个用法:


    public void oneValueAnimator() {
        final ValueAnimator animator =ValueAnimator.ofFloat(0,100);
        animator.setTarget(tv);
        animator.setDuration(1000).start();
        animator.addUpdateListener(new AnimatorUpdateListener() {

            @Override
            public void onAnimationUpdate(ValueAnimator arg0) {
                float value =(float) arg0.getAnimatedValue();
                ViewGroup.LayoutParams layoutParams = layout.getLayoutParams();
                layoutParams.height =(int) value;
                layout.setLayoutParams(layoutParams);
            }
        });
    }

这里是通过有这写数据,来不断的设置View的高度,实现一个动画的效果。

最后来看看AnimatorSet,前面提到过,它的用法和PropertyValuesHolder 是很相似的,但是不同的是,它可以实现多个对象和多种属性的同时动画效果,大概的用法如下:

    public void oneAnimatorSet(){
        ObjectAnimator animator=ObjectAnimator.ofFloat(tv, "translationX", 300f);
        ObjectAnimator animator2=ObjectAnimator.ofFloat(tv, "scaleX", 1f,0,1f);
        ObjectAnimator animator3=ObjectAnimator.ofFloat(tv, "scaleY",  1f,0,1f);
        AnimatorSet set = new AnimatorSet();
        set.setDuration(1000);
        set.playTogether(animator,animator2,animator3);
        set.start();
    }

在属性动画中,Animator正是通过playTogether(),with()、before等等方法来控制协调的,这样就是实现对动画播放的顺序精确控制。

今天只是简单的认识一下基本用法,我会在后期的学习中,推出具有实战意义的动画效果。谢谢阅读。

最后,感谢徐宜生大神。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值