android 帧动画,补间动画,属性动画的简单总结
发布时间 - 2026-01-10 22:20:10 点击率:次帧动画——FrameAnimation

将一系列图片有序播放,形成动画的效果。其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用
在Drawable文件夹下,创建animation-list为根节点的资源文件
<animation-list android:oneshot="false"> <item android:drawable="@drawable/img1" android:duration="100"/> <item android:drawable="@drawable/img2" android:duration="100"/> <item android:drawable="@drawable/img3" android:duration="100"/> <item android:drawable="@drawable/img4" android:duration="100"/> </animation-list>
oneshot:是否只播放一次
drawable:一帧引用的图片
duration:一帧播放的时间
播放动画
将动画作为控件的背景
((AnimationDrawable)view.getBackground()).start();
Animation常用属性
duration:动画时间
repeatCount:重复次数 infinite无限次
fillAfter:是否停止在最后一帧
repeatMode:重复模式 值:restart重新开始,reserve反复
startOffset:开始延迟时间
补间动画 Tween Animation
只能应用于View对象,只支持部分属性,View animation值改变了View绘制的位置,并没有改变对象本身的真实位置
可以使用XML定义也可以使用代码定义 XML定义的动画放在/res/anim/文件夹内
开始动画 通过view的startAnimation(Animation a) 参数定义的动画
四种补间动画通过XML定义
AlphaAnimation:透明度动画
<?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:fromAlpha="0" android:toAlpha="1" android:duration="2000"> <!-- fromAlpha 起始透明度 0为完全透明 1为不透明 0~1之间的浮点值 toAlpha 结束透明度 duration 动画运行时间 单位毫秒 --> </alpha>
AlphaAnimation alphaAnimation=null; //加载XML中的动画XML文件 alphaAnimation= (AlphaAnimation) AnimationUtils.loadAnimation(MainActivity.this, R.anim.anim_alpha); //常用属性设置 各种动画通用 alphaAnimation.setRepeatCount(3);//执行动画效果结束后重复执行3次 一共4次 alphaAnimation.setRepeatMode(Animation.REVERSE);//重复模式 //动画结束是否停止在最后一帧 alphaAnimation.setFillAfter(true); //动画结束是否停止在第一帧 alphaAnimation.setFillBefore(false); //设置插值器 动画执行速度 变速 加减速。。 //AccelerateInterpolator减速 //DecelerateInterpolator加速 alphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator());
ScaleAnimation:缩放动画
代码加载的方式和方法的使用与AlphaAnimation一样
<?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:toXScale="1" android:toYScale="1" android:fromXScale="0.1" android:fromYScale="0.1" android:pivotY="0%" android:pivotX="0%" android:duration="2000"> <!-- 浮点值 表示倍数 自身几倍 fromXScale 动画在X轴以自身几倍伸缩开始 toXScale 动画在X轴以自身几倍伸缩结束 fromYScale 动画在Y轴以自身几倍伸缩开始 toYScale 动画在Y轴以自身几倍伸缩结束 pivotX 动画相对于控件自身的X坐标的开始位置 pivotY 动画相对于控件自身的Y坐标的开始位置 0% 0% 表示控件左上角 为0,0原点坐标 --> </scale>
TranslateAnimation:平移动画
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="-100%p" android:fromYDelta="0" android:toXDelta="100%p" android:toYDelta="0" android:duration="2000"> <!-- fromXDelta x轴起始位置 toXDelta X轴结束位置 fromYDelta y轴起始位置 toYDelta y轴结束位置 100%p 表示相对于父级 100%相对于自身 --> </translate>
RotateAnimation:旋转动画
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:toDegrees="360" android:duration="2000" android:pivotX="50%" android:pivotY="50%" android:interpolator="@android:anim/accelerate_decelerate_interpolator"> <!-- interpolator 指定动画的插值器 accelerate_decelerate_interpolator 加速-减速 accelerate_interpolator 加速 decelerate_interpolator 减速 fromDegrees 动画起始角度 toDegrees 动画结束旋转的角度 可以大于360度 负数表示逆时针旋转 正数表示顺时针旋转 pivotX相对于view的X坐标的开始位置 pivotY相对于view的Y坐标的开始位置 绝对尺寸 100px 50% 相对尺寸 相对于自身的50% 50%p 相对尺寸 相对于父容器的50% 50%为物件的X或Y方向坐标上的中点位置 duration 动画播放时间 单位毫秒 --> </rotate>
通过构造方法创建
构造参数详解 此段内容选自 http://www.cnblogs.com/aimeng/archive/2011/10/10/2206710.html
//在代码中定义 动画实例对象 private Animation myAnimation_Alpha; private Animation myAnimation_Scale; private Animation myAnimation_Translate; private Animation myAnimation_Rotate; //根据各自的构造方法来初始化一个实例对象 myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f); myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f); myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
AlphaAnimation
AnimationAlphaAnimation(float fromAlpha, float toAlpha) //第一个参数fromAlpha为 动画开始时候透明度 //第二个参数toAlpha为 动画结束时候透明度 myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f); //说明: // 0.0表示完全透明 // 1.0表示完全不透明 myAnimation_Alpha.setDuration(5000); //设置时间持续时间为 5000毫秒
ScaleAnimation
ScaleAnimation(float fromX, float toX, float fromY, float toY,
int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
//第一个参数fromX为动画起始时 X坐标上的伸缩尺寸
//第二个参数toX为动画结束时 X坐标上的伸缩尺寸
//第三个参数fromY为动画起始时Y坐标上的伸缩尺寸
//第四个参数toY为动画结束时Y坐标上的伸缩尺寸
/*说明:
以上四种属性值
0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
*/
//第五个参数pivotXType为动画在X轴相对于物件位置类型
//第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
//第七个参数pivotXType为动画在Y轴相对于物件位置类型
//第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
myAnimation_Scale =new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
myAnimation_Scale.setDuration(700);
//设置时间持续时间为 700毫秒
TranslateAnimation
TranslateAnimation(float fromXDelta, float toXDelta,
float fromYDelta, float toYDelta)
//第一个参数fromXDelta为动画起始时 X坐标上的移动位置
//第二个参数toXDelta为动画结束时 X坐标上的移动位置
//第三个参数fromYDelta为动画起始时Y坐标上的移动位置
//第四个参数toYDelta为动画结束时Y坐标上的移动位置
RotateAnimation
RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) //第一个参数fromDegrees为动画起始时的旋转角度 //第二个参数toDegrees为动画旋转到的角度 //第三个参数pivotXType为动画在X轴相对于物件位置类型 //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置 //第五个参数pivotXType为动画在Y轴相对于物件位置类型 //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置 myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
属性动画
相对补间动画 属性动画会真正的使目标对象的属性值发生改变,不像补间动画只是影像的改变 只能修改具有get/set方法的属性值
因为可以修改对象的属性,属性动画可以做到更多的效果,改变文本大小,背景颜色等等
属性动画创建在 res/animator
ValueAnimator
包含属性动画的所有核心功能,动画时间,开始、结束属性值,属性值计算方法等。
ValuAnimiator设置开始结束值 实现ValueAnimator.onUpdateListener接口,
这个接口只有一个函数onAnimationUpdate(),在这个函数中会传入ValueAnimator对象做为参数,通过这个ValueAnimator对象的getAnimatedValue()函数可以得到当前的属性值
把属性值设置给某个控件的某个属性
使用xml
<?xml version="1.0" encoding="utf-8"?> <animator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:valueFrom="0" android:valueTo="300" android:valueType="intType" android:interpolator="@android:interpolator/overshoot"> <!-- valueFrom 起始值 valueTo 结束值 valueType 值的类型 intType整数值、floatType浮点值、colorType颜色值 interpolator插值器 --> </animator>
ValueAnimator valueAnimator=null; //通过AnimatorInflater.loadAnimator()加载xml 创建ValueAnimator valueAnimator= (ValueAnimator) AnimatorInflater.loadAnimator(this,R.animator.animator_value); //动画执行时间 valueAnimator.setDuration(3000); //值改变监听 valueAnimator.addUpdateListener(listener); //开始动画 valueAnimator.start();
private ValueAnimator.AnimatorUpdateListener listener=new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
//获取值
int value= (int) animation.getAnimatedValue();
//btnValueAnimator为测试控件
//设置控件X轴平移
btnValueAnimator.setTranslationX(value);
}
};
使用代码
/**
* valueAnimator 单个值
*/
//代码创建 ValueAnimator类自身的方法
//ofFloat值类型float
ValueAnimator valueAnimator=ValueAnimator.ofFloat(0,1);
//ofInt值类型int 从0~300
valueAnimator=ValueAnimator.ofInt(0,300);
//也可以用来设置颜色 在颜色改变过程中会将颜色变化情况显示出来
//红色到蓝色的改变过程 显示N种颜色
valueAnimator=ValueAnimator.ofInt(Color.RED,Color.BLUE);
//ofArgb设置颜色 如果无法使用 是的sdk版本低了
//这个方法改变颜色过程中只显示红色和蓝色
//valueAnimator=ValueAnimator.ofArgb(Color.RED,Color.BLUE);
//设置插值器
valueAnimator.setInterpolator(new CycleInterpolator());
/**
*
* ValueAnimator.ofPropertyValuesHolder 设置多个值
*/
//设置动画属性 参数1:名字 参数2,3值的变化区间
PropertyValuesHolder alphaHolder=PropertyValuesHolder.ofFloat("alpha",0f,1f);
PropertyValuesHolder widthHolder=PropertyValuesHolder.ofInt("width",0,300);
//ValueAnimator.ofPropertyValuesHolder 添加holder 创建动画
valueAnimator=ValueAnimator.ofPropertyValuesHolder(alphaHolder,widthHolder);
//动画执行时间
valueAnimator.setDuration(3000);
//值改变监听
valueAnimator.addUpdateListener(listener);
private ValueAnimator.AnimatorUpdateListener listener=new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
/**
* 单个值获取 getAnimatedValue取出变化值 根据设置类型强转
* btnValueAnimator 测试用的button
*/
// int value= (int) animation.getAnimatedValue();
// btnValueAnimator.setTranslationX(value);横坐标平移
// float value= (float) valueAnimator.getAnimatedValue();
// btnValueAnimator.setAlpha(value);透明度改变
// int value= (int) animation.getAnimatedValue();
// btnValueAnimator.setTextColor(value);文字颜色改变
/**
* PropertyValuesHolder存了多个值 通过名字获取 强制转换
*/
float alpha= (float) valueAnimator.getAnimatedValue("alpha");
int width= (int) valueAnimator.getAnimatedValue("width");
btnValueAnimator.setAlpha(alpha);//改变透明度
//图像绘制 左边不变从右边慢慢增加
//修改控件的width height不能使用setWidth或setHeight
btnValueAnimator.setRight(width);
//btnValueAnimator.setBottom(width);
}
};
ObjectAnimator:
继承自ValueAnimator,要指定一个对象及该对象的一个属性,当属性值计算完成时自动设置为该对象的相应属性,不需要设置监听,底层自动完成,一般会用ObjectAnimator来改变某一对象的某一属性
//用来测试的button
Button btnObjectAnimator= (Button) findViewById(R.id.btn_object_animator);
//加载动画
ObjectAnimator objectAnimator= (ObjectAnimator) AnimatorInflater.loadAnimator(this,R.animator.animator_object);
//绑定控件
objectAnimator.setTarget(btnObjectAnimator);
//参数1 绑定控件 参数2 设置 属性 参数3 设置值
objectAnimator=ObjectAnimator.ofInt(btnObjectAnimator,"textColor",Color.RED);
//PropertyValuesHolder设置多个属性
PropertyValuesHolder translationXHolder=PropertyValuesHolder.ofFloat("translationX",0,300);
PropertyValuesHolder translationYHolder=PropertyValuesHolder.ofFloat("translationY",0,200);
objectAnimator=ObjectAnimator.ofPropertyValuesHolder(btnObjectAnimator,translationXHolder,translationYHolder);
objectAnimator.setDuration(3000);
//开始动画
objectAnimator.start();
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# android
# 帧动画
# 补间动画
# 属性动画
# Android Studio实现补间动画
# Android动画系列之帧动画和补间动画的示例代码
# Android动画学习笔记之补间动画
# Android补间动画基本使用(位移、缩放、旋转、透明)
# Android旋转、平移、缩放和透明度渐变的补间动画
# Android控件Tween动画(补间动画)实现方法示例
# Android帧动画、补间动画、属性动画用法详解
# Android动画之补间动画(Tween Animation)基础学习
# Android动画之补间动画(Tween Animation)实例详解
# Android Studio实现简单补间动画
# 标上
# 相对于
# 第一个
# 第二个
# 几倍
# 多个
# 浮点
# 结束时
# 第三个
# 加载
# 插值
# 执行时间
# 时间为
# 可以使用
# 四种
# 绑定
# 过程中
# 第五个
# 不透明
# 是一个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
zabbix利用python脚本发送报警邮件的方法
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
详解CentOS6.5 安装 MySQL5.1.71的方法
Laravel如何创建自定义Facades?(详细步骤)
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何快速生成ASP一键建站模板并优化安全性?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
如何正确选择百度移动适配建站域名?
Laravel如何处理CORS跨域请求?(配置示例)
昵图网官方站入口 昵图网素材图库官网入口
Bootstrap CSS布局之列表
UC浏览器如何设置启动页 UC浏览器启动页设置方法
jQuery validate插件功能与用法详解
教学论文网站制作软件有哪些,写论文用什么软件
?
如何在Windows服务器上快速搭建网站?
Laravel如何实现本地化和多语言支持?(i18n教程)
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Python进程池调度策略_任务分发说明【指导】
如何实现javascript表单验证_正则表达式有哪些实用技巧
如何在香港免费服务器上快速搭建网站?
linux top下的 minerd 木马清除方法
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
PHP 500报错的快速解决方法
详解Oracle修改字段类型方法总结
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
jQuery 常见小例汇总
高端网站建设与定制开发一站式解决方案 中企动力
太平洋网站制作公司,网络用语太平洋是什么意思?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
Python面向对象测试方法_mock解析【教程】
Laravel如何生成API文档?(Swagger/OpenAPI教程)
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
JavaScript如何实现类型判断_typeof和instanceof有什么区别
如何在香港服务器上快速搭建免备案网站?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
Laravel如何使用Gate和Policy进行授权?(权限控制)
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Laravel如何自定义分页视图?(Pagination示例)
想要更高端的建设网站,这些原则一定要坚持!
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
详解jQuery中的事件
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
高防服务器:AI智能防御DDoS攻击与数据安全保障
上一篇:腾讯会议怎么修改个人会议号
上一篇:腾讯会议怎么修改个人会议号

