Android属性动画分析
2015-10-29 17:24
309 查看
1、属性动画是3.0之后出来的,在属性动画中有两个属性框架,分别是ObjectAnimator或ValueAnimator,下面我们来详细的介绍它们的用法。
ObjectAnimator是属性动画框架中最重要的实行类,创建一个ObjectAnimator只需要通过它的静态工厂类直接返回一个ObjectAnimator对象。
填2000参数是表示做这个旋转动画执行2000毫秒。
2、我们来介绍ObjectAnimator操作的属性。
translationX和translationY:这两个属性作为一种增量来控制这View对象从它布局容器的左上角坐标开始的位置。
rotation,rotationX,rotationY:这三个属性控制View对象围绕支点进行2D和3D旋转。
scaleX和scaleY:这两个属性控制着View对象围绕他的支点进行2D缩放。
pivotX和pivotY:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认情况下,该支点的位置就是View对象的中心点。
X 和 Y:这是两个简单实用的属性,他描述了View对象在它的容器中的最终位置,它是最初的左上角坐标和translationX,translationY值得累计和。
alpha:它表示View对象的alpha透明度。默认值是1(不透明),0代表完全透明(不可见)。
3、要同时使用动画时可以使用PropertyValuesHolder对象来控制translationX,scaleX,scaleY这三个属性。
ValueAnimator animator = ValueAnimator.ofFloat(0,100);
animator.setTarget(view);
animator.setDuration(1000);
animator.start();
5、动画事件的监听。
ValueAnimator animator = ValueAnimator.ofFloat(0,100);
ae2a
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
//监听动画开始
}
@Override
public void onAnimationEnd(Animator animation) {
//监听动画结束
}
@Override
public void onAnimationCancel(Animator animation) {
//监听动画取消
}
@Override
public void onAnimationRepeat(Animator animation) {
//监听动画是否重复
}
});
animator.start();
当然如果使用不了这多的方法,也不需要重写这么的方法 ,Api也提供了这种处理。
ObjectAnimator animator = ObjectAnimator.ofFloat(this,"translationX",360f);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//监听动画值
}
});
6、AnimatorSet动画集合
对于一属性同时作用多个属性动画效果,前面已经用PropertyValuesHolder实现了这样的效果。而AnimatorSet不仅能实现这样的效果,
同时也能实现更为精确的顺序控制。
ObjectAnimator animator1 = ObjectAnimator.ofFloat(this,"translationX",360f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(this,"scaleX",1f,0f,1f);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(this,"scaleY",1f,0f,1f);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(1000);
animatorSet.playTogether(animator1,animator2,animator3);
animatorSet.start();
7.interpolators(插值器)
插值器是动画中一个非常重要的概念,通过插值器(Interpolators),可以定义动画变换速率,这一点非常类似物理中的加速度,其作用主要是控制目标变量的变化值进行对应的变换。
//自定义Interpolators动画过程
public class DecelerateAccelerateInterpolator implements TimeInterpolator {
@Override
public float getInterpolation(float input) {
float result;
if (input <= 0.5) {
result = (float) ((Math.sin(Math.PI*input))/2);
}else {
result = (float) ((2-Math.sin(Math.PI*input))/2);
}
return result;
}
}
ObjectAnimator是属性动画框架中最重要的实行类,创建一个ObjectAnimator只需要通过它的静态工厂类直接返回一个ObjectAnimator对象。
ObjectAnimator animator = ObjectAnimator.ofFloat(view,"rotation",0f,360f); animator.setDuration(2000); animator.start();这是一个View的旋转动画,第一个参数是View对象,第二个参数是要操作的属性,后面是一个可变数组参数,我这传的是0f到360f是表示控件旋转360度,
填2000参数是表示做这个旋转动画执行2000毫秒。
2、我们来介绍ObjectAnimator操作的属性。
translationX和translationY:这两个属性作为一种增量来控制这View对象从它布局容器的左上角坐标开始的位置。
rotation,rotationX,rotationY:这三个属性控制View对象围绕支点进行2D和3D旋转。
scaleX和scaleY:这两个属性控制着View对象围绕他的支点进行2D缩放。
pivotX和pivotY:这两个属性控制着View对象的支点位置,围绕这个支点进行旋转和缩放变换处理。默认情况下,该支点的位置就是View对象的中心点。
X 和 Y:这是两个简单实用的属性,他描述了View对象在它的容器中的最终位置,它是最初的左上角坐标和translationX,translationY值得累计和。
alpha:它表示View对象的alpha透明度。默认值是1(不透明),0代表完全透明(不可见)。
3、要同时使用动画时可以使用PropertyValuesHolder对象来控制translationX,scaleX,scaleY这三个属性。
PropertyValuesHolder pvh1=PropertyValuesHolder.ofFloat(“translationX”,300f); PropertyValuesHolder pvh2=PropertyValuesHolder.ofFloat(“scaleX”,1f,0,1f); PropertyValuesHolder pvh3=PropertyValuesHolder.ofFloat(“scaleY”,1f,0,1f); ObjectAnimator.ofPropertyValuesHolder(view,pvh1,pvh2,pvh3) .setDuration(1000) .start();4、在来说说ValueAnimator在属性动画中占有非常重要的地位,虽然不想ObjectAnimator那样耀眼但它却是属性动画的核心所在,ObjectAnimator也是继承ValueAnimator。
ValueAnimator animator = ValueAnimator.ofFloat(0,100);
animator.setTarget(view);
animator.setDuration(1000);
animator.start();
5、动画事件的监听。
ValueAnimator animator = ValueAnimator.ofFloat(0,100);
ae2a
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
//监听动画开始
}
@Override
public void onAnimationEnd(Animator animation) {
//监听动画结束
}
@Override
public void onAnimationCancel(Animator animation) {
//监听动画取消
}
@Override
public void onAnimationRepeat(Animator animation) {
//监听动画是否重复
}
});
animator.start();
当然如果使用不了这多的方法,也不需要重写这么的方法 ,Api也提供了这种处理。
ObjectAnimator animator = ObjectAnimator.ofFloat(this,"translationX",360f);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//监听动画值
}
});
6、AnimatorSet动画集合
对于一属性同时作用多个属性动画效果,前面已经用PropertyValuesHolder实现了这样的效果。而AnimatorSet不仅能实现这样的效果,
同时也能实现更为精确的顺序控制。
ObjectAnimator animator1 = ObjectAnimator.ofFloat(this,"translationX",360f);
ObjectAnimator animator2 = ObjectAnimator.ofFloat(this,"scaleX",1f,0f,1f);
ObjectAnimator animator3 = ObjectAnimator.ofFloat(this,"scaleY",1f,0f,1f);
AnimatorSet animatorSet = new AnimatorSet();
animatorSet.setDuration(1000);
animatorSet.playTogether(animator1,animator2,animator3);
animatorSet.start();
7.interpolators(插值器)
插值器是动画中一个非常重要的概念,通过插值器(Interpolators),可以定义动画变换速率,这一点非常类似物理中的加速度,其作用主要是控制目标变量的变化值进行对应的变换。
//自定义Interpolators动画过程
public class DecelerateAccelerateInterpolator implements TimeInterpolator {
@Override
public float getInterpolation(float input) {
float result;
if (input <= 0.5) {
result = (float) ((Math.sin(Math.PI*input))/2);
}else {
result = (float) ((2-Math.sin(Math.PI*input))/2);
}
return result;
}
}
相关文章推荐
- android 如何显示模态的 DialogFragment。
- android线程池
- android 代码控制TextView的字体加粗
- Android 缓存-ASimplecache
- Android studio 导入github工程
- -Android Studio导入Project的方法
- Android卸载监听详解
- Android系统中异步消息处理线程机制的理解
- Android 广播大全
- android tv 开发的列表条目在获得焦点时的背景效果
- Android之打开闪光灯关键代码
- Android开发手记(17) 数据存储二 文件存储数据
- 换掉图片加载框架引发的血案 代理
- Android 百分比布局库(percent-support-lib) 解析与扩展
- Gradle 使用Gradle构建Android应用的渠道包
- Android签名
- android lint三部曲三:Android-Lint 检查问题列表
- Android 常见度量单位【xdpi、hdpi、mdpi、ldpi】 解读
- Android创建activity
- WebView的使用,android与JS混编