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’
上一篇: python爬爬有道词典
推荐阅读
-
Android编程实现全局获取Context及使用Intent传递对象的方法详解
-
Android studio使用git代码追溯到上个文件的教程?
-
Android学习之Broadcast的简单使用
-
Android 布局中的android:onClick的使用方法总结
-
Android 使用volley过程中遇到的问题解决办法
-
分享Android平板电脑上开发应用程序不能全屏显示的问题解决
-
android startActivityForResult的使用方法介绍
-
android UI进阶之android中隐藏的layout 抽屉的使用方法
-
android TextView属性的详细介绍 分享
-
使用android隐藏api实现亮度调节的方法