动画分为三种
1、传统的平移类动画
只是改变控件的视觉效果,但是实际位置没有变动,主要使用的类是TranslateAnimation(平移)、ScaleAnimation(缩放)、RotateAnimation(旋转)、AlphaAnimation(透明度)
2、帧动画
多张图片播放,这种需要控制图片的大小,不然容易oom
3、属性动画
3.1 ObjectAnimator动画
改变整体控件的位置,类似于传统的平移动画效果,继承ValueAnimator类,对他的封装,主要使用ObjectAnimator类,使用时传入对应的参数即可修改,参数包括translationX、translationY、scaleX、scaleY、rotate、alpha。
ObjectAnimator animator = new ObjectAnimator(view,"translationX",0,1);
3.2 ValueAnimator动画
可以改变控件的某一个属性,比如可以修改控件的高,设置逐渐变高等效果。这个又涉及两个重要的类
插值器TimeInterpolator:控制动画运行的规律,主要是时间的控制,
比如匀速LinearInterpolator、动画加速AccelearteInterpolator、最后阶段弹球效果BounceInterpolator、周期运动CycleInterpolator、先加速在减速AccelerateDecelerateInterpolator
实现:实现TimeInterpolator接口,重写getInterpolation()方法,在里面实现我们想要的效果
下面的就是和系统的LinearInterpolator一样的效果
public class MyLinearInterpolator implements TimeInterpolator {
@Override
public float getInterpolation(float input) {
return input;//这里面设置input*0.1表示只能完成总体效果的10%,input*20表示能完成2000%的效果,也就是如果画圆,前者只能画36度,后者可以画7200度,这部分的原理是因为估值器的fraction就是根据这个方法获取的值
}
}
估值器TypeEvaluator:控制动画的轨迹,某一刻的的最终效果
实现:实现TypeEvaluator接口,重写evaluate()方法
public class MyTypeEvluator implements TypeEvaluator<Float> {
/**
* fraction:表示动画完成度,据此计算当前动画的值
* startValue:动画初始值
* endValue:动画结束值
* @return
*/
@Override
public Float evaluate(float fraction, Float startValue, Float endValue) {
Float startInt = startValue;
return (startInt+fraction*(endValue-startValue))*0.2f; //设置只能达到设置效果的20%
}
}
PropertyValuesHolder:用来封装用户传入的属性和属性值

本文深入介绍了Android中的三种动画类型:平移、帧动画和属性动画。平移动画包括TranslateAnimation、ScaleAnimation、RotateAnimation和AlphaAnimation;帧动画涉及多张图片连续播放,需注意内存管理;属性动画如ObjectAnimator和ValueAnimator,能够改变控件位置和属性,并可通过TimeInterpolator和TypeEvaluator自定义动画效果。此外,还探讨了如何使用插值器和估值器来控制动画的时间规律和轨迹。
1737

被折叠的 条评论
为什么被折叠?



