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

Android属性动画的使用(上)

程序员文章站 2022-05-04 12:04:18
...

前言:

安卓里面由于补间动画,只是变化的是视图的位置,但是属性的话,是没有变的,就是以前大家在使用动画的时候,如果在tagView(目标视图)上设置了监听事件,但是,当tagView在移动的时候,点击事件还在原位置,这样很不方便,后面在API3.0以后就新增了属性动画,很好的解决了以上问题,而且新增的功能还可以扩展很多的动画效果,下面就先来说说ValueAnimator的重要性

分析:

动画,简单来说就是在一段时间里面进行一系列视图的变化,也就是必须有一定的过程,在数学里面也是就时间段,而不是时间刻,(小装个逼,嘻嘻!)
一、ValueAnimator(非常重要的):
1.首先ValueAnimator继承于父类的Animator,而它的实现子类ObjectAnimator以及TimeAnimator,暂时这里先不说这两个子类
2.学习新的类,肯定要先了解其API的使用:

ValueAnimator valueAnimator = ValueAnimator.ofInt(0, 1);
        valueAnimator.setEvaluator();//设置评估者
        valueAnimator.setRepeatCount();//设置动画重复的次数
        valueAnimator.setInterpolator();//设置动画的插值器;也就是动画如何变化,就像速度的描述加速度一样
        valueAnimator.setDuration();//动画的时间
        valueAnimator.setStartDelay();//动画在开始之前延迟多少
        valueAnimator.setRepeatMode();//动画重复的方式;RESTART:开始-结束 开始-结束;REVERSE:开始-结束-开始 
        valueAnimator.addListener();//动画的监听
        valueAnimator.addUpdateListener();//动画属性值更新的监听

二、ValueAnimator的重要使用:
1.setEvaluator()的方法:

public class IntEvaluator implements TypeEvaluator<Integer> {

public Integer evaluate(float fraction, Integer startValue, Integer endValue) 
{
int startInt = startValue;
return (int)(startInt + fraction * (endValue - startInt)); 
    }
}

里面有三个参数:

  • fraction:这个值是由插值器返回的一个百分比的数值,范围0~1之间
  • startValue:起始值
  • endValue:结束值

这个评估者的类里面就是返回一个一直在叠加的值,也就是一段时间里面变化的值,如果能得到这个值,是不是很多的动画效果就迎刃而解了,因为View变化的时候,其实就是时期位置在一段时间里面不断的变化,当间隔小于肉眼所感知的峥,就认为是在动

2.addUpdateListener();这个方法就是监听动画在动的过程中的回调,那么这里面应该有我们想要的东西

valueAnimator.addUpdateListener(new
ValueAnimator.AnimatorUpdateListener() {
             @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                 Object animatedValue = animation.getAnimatedValue();//这个不正式我们上面传的
                 值吗
                //在这里面我们是不是可以设置View的透明度,平移,旋转,以及放大,其实一段时间里面这还可以变换颜色
            }
        });

3.当然颜色变换的评估者系统已经给大家定义好了:

public class ArgbEvaluator implements TypeEvaluator {
    public Object evaluate(float fraction, Object startValue, Object endValue) {
        int startInt = (Integer) startValue;
        int startA = (startInt >> 24);
        int startR = (startInt >> 16) & 0xff;
        int startG = (startInt >> 8) & 0xff;
        int startB = startInt & 0xff;

        int endInt = (Integer) endValue;
        int endA = (endInt >> 24);
        int endR = (endInt >> 16) & 0xff;
        int endG = (endInt >> 8) & 0xff;
        int endB = endInt & 0xff;

        return (int)((startA + (int)(fraction * (endA - startA))) << 24) |
                (int)((startR + (int)(fraction * (endR - startR))) << 16) |
                (int)((startG + (int)(fraction * (endG - startG))) << 8) |
                (int)((startB + (int)(fraction * (endB - startB))));
    }
}

大家要做变背景色的效果是不是很简单就可以实现

总结:有时候大家可能对一些动画可能很没有头绪,也可能是一些属性变化没有什么头绪,希望鄙人上面所讲的会对你有更大的帮助,你只要知道了思想才可能,应对更对的可能

注意:因为属性动画是API3.0以后的属性;所以在GitHub有大神给出来兼容的属性动画:只要在AS里面依赖:

compile ‘com.nineoldandroids:library:2.4.0’

相关标签: android animator