Android属性动画的使用(上)

前言:

安卓里面由于补间动画,只是变化的是视图的位置,但是属性的话,是没有变的,就是以前大家在使用动画的时候,如果在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’

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值