android 在线动画框架,android view 动画框架

本文深入探讨了Android中的动画机制,从视图动画(AlphaAnimation、RotateAnimation等)到属性动画(AnimatorSet、ObjectAnimator)。详细介绍了如何使用ObjectAnimator进行平移、缩放和透明度变化,以及如何通过PropertyValuesHolder实现多个属性的动画。还提到了XML中定义和使用属性动画的方法,并展示了如何直接使用view.animate()简化动画代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理:

绘制view时会调用viewGroup中的drawChild函数时,获取view的Animation的Transformation值,then调用canvas.concat(transformToApply.getMatrix),通过矩阵运算完成帧动画。

历史:

视图动画:AlphaAnimation、RotateAnimation、TranslateAnimation、ScaleAnimation、AnimationSet(动画集合)

开启方法:

1.实例化AlphaAnimation(举例)

2.配置属性(set方法,监听器)

3.view.startAnimation(animation)

属性动画(Android 3.0):

较视图动画的优势:具备交互性。

基础:AnimatorSet 和 ObjectAnimator

ObjectAnimator使用了一个静态工厂方法创建实例。

ObjectAnimator animatior = ObjectAnimator.ofFloat(button, "translationY", 300 + i * 100); animatior.setDuration(300); LinearInterpolator ll = new LinearInterpolator(); animatior.setInterpolator(ll); animatior.start();

第一个参数是view(整个view必须要有set和get),第二个是要修改的属性【translationX和translationY、rotation和rotationX和rotationY、scaleX和ScaleY、pivotX和pivotY:支点坐标、alpha】,第三个是设置的值。

如果view中得属性没有使用set和get方法,还要使用属性动画,google提供了两个方法来解决这个问题:

1.自定义个属性类或包装类,来间接地给这个属性增加get、set方法。

2.使用ValueAnimatior

public class WrapperView { private View mTarget; public WrapperView(View target){ mTarget = target; } public int getWidth(){ return mTarget.getLayoutParams().width; } public void setWidth(int width){ mTarget.getLayoutParams().width = width; mTarget.requestLayout(); } }

使用时:

WrapperView wrapperView = new WrapperView(button); ObjectAnimator.ofInt(wrapperView,"width",50).setDuration(5000).start();

PropertyValuesHolder

作用:针对同一个对象的多个属性使用动画。

使用方法:

PropertyValuesHolder pvh1 = PropertyValuesHolder.ofFloat("translationY",300 + i * 100); PropertyValuesHolder pvh2 = PropertyValuesHolder.ofFloat("scaleX",1.5f); PropertyValuesHolder pvh3 = PropertyValuesHolder.ofFloat("alpha",0.1f); ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(button,pvh1,pvh2,pvh3); animator.setDuration(300);animator.start();

ValueAnimator

ObjectAnimator继承于ValueAnimator。

作用:本身并不具备动画的功能,而是一个数值发生器,用来产生具有一定规律的数字,进而控制动画的实现过程。

AnimatorSet

既能实现propertyValuesHolder的功能,还能提供更为精确的顺序控制。

提供play().with().before().after()、playTogether()、playSequentially()

在XML中使用属性动画

在res文件夹下建立animator文件夹,在新建文件scale.xml,内容如下:

android:duration = "300"

android:propertyName= "scaleX"

android:valueFrom = "1.0"

android:valueTo = "2.0"

android:valueType = "floatType" />

在类中以下面的方式调用:

Animator animator = AnimatorInflater.loadAnimator(this,R.animator.scale);

animator.setTarget(button);

animator.start();

一种简便的属性动画书写方式:

android 3.0以后可以直接使用view.animate()使用属性动画。

button.animate().alpha(0.1f).scaleX(2.0f).y(300).setDuration(300).withStartAction(

new Runnable() {

@Override

public void run() {

}

}).withEndAction(new Runnable() {

@Override

public void run() {

}

}).start();

}});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值