欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android动画----属性动画

程序员文章站 2024-03-21 11:13:28
...

一、使用属性动画

1、定义:属性动画可以对任意对象的属性进行动画。默认时间间隔300ms,默认帧率10ms/帧

2、使用:

API 11才可以使用,之前的可以用Nineoldandroids来兼容,其有常用的几个动画类:ValueAnimator、ObjectAnimator、AnimatorSet。其使用方法如下:

(1)改变一个对象的translationY属性,沿着Y轴向上平移:用ObjectAnimator

Android动画----属性动画

(2)改变背景色属性

Android动画----属性动画

(3)动画集合变化

Android动画----属性动画

(4)也可以用XML实现,但用代码实现比较灵活

二、插值器和估值器

1、插值器是根据时间流逝比计算位移x的改变值(0~1)之间,例如:匀速插值器时间流逝比为0.5,则x改变值为0.5

2、估值器是对于x的改变具体变成了什么,也就是说具体的位移为多少,要用估值器来计算。例如:匀速运动,x的改变值为0.5,距离是从0到40,那么估值器算过后位移y的值为 (40-0)*05 = 20

3、自定义插值器

Android动画----属性动画

三、属性动画监听器

属性动画监听器主要有如下两个接口:AnimatorUpdateListener和AnimatorListener

1、AnimatorListener类

Android动画----属性动画

2、AnimatorUpdateListener

Android动画----属性动画

四、对任意属性做动画

eg:Button的宽度进行动画时,如果使用View动画是不行的。因为View只支持平移、旋转、缩放、不透明度,所以只能用属性动画。

1、属性动画生效条件

属性动画要求动画作用的对象提供该属性的get和set方法,不满足的话动画不生效。

Android动画----属性动画

2、如何添加set和get方法

Android动画----属性动画

    private void performAnimate() {//使用动画的方法
        ViewWrapper viewWrapper = new ViewWrapper(mButton);
        ObjectAnimator.ofInt(viewWrapper, "width", 500).setDuration(5000).start();
        
        //直接传mButton是实现不了的
        //ObjectAnimator.ofInt(mButton, "width", 500).setDuration(5000).start();
    }
    @Override
    public void onClick(View v) {
        if (v == mButton) {
            performAnimate();
        }
    }
    private static class ViewWrapper {//内部类,设置set/get
        private View mTarget;
        public ViewWrapper (View mTarget) {
            this.mTarget = mTarget;
        }
        
        public int getWidth() {
            return mTarget.getLayoutParams().width;
        }
        
        public void setWidth() {
            mTarget.getLayoutParams().width = width;
            mTarget.requestLayout();
        }
    }

五、属性动画工作原理--null看不懂。