Android实现动画效果详解
作者:掌缘生灭 发布时间:2022-04-19 20:37:43
标签:android,android动画
目前Android平台提供了两类动画一类是Tween动画,第二类就是 Frame动画,具体内容介绍请看下文:
一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。
第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。
实现动画有两种方式:一种使用XML文件(文件放在res/anim),一种直接代码搞定
1、透明度控制动画效果alpha
<!--
透明度控制动画效果alpha
浮点型值:
fromAlpha 动画起始时透明度
toAlpha 动画结束时透明度
说明:0.0 完全透明
1.0 完全不透明
以上值取0.0-1.0之间的 float数据类型的数字
duration 为动画持续时间
长整型:
说明:时间以毫秒为单位
-->
<alpha
android:duration="3000"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
代码方式:
Animation animationAlpha = new AlphaAnimation(0.0f, 1.0f);
animationAlpha.setDuration(3000);
ivAnim.startAnimation(animationAlpha);
2、rotate旋转动画
<!--
rotate旋转动画效果
属性:interpolator 指定一个动画的插入器
有三种动画插入器:
accelerate_decelerate_interpolator 加速-减速 动画插入器
accelerate_interpolator 加速-动画插入器
decelerate_interpolator 减速-动画插入器
其他的属于特定的动画效果
浮点整型值:
fromDegrees 为动画起始时物件的角度
toDegrees 为动画起始时物件旋转的角度 可以大于360度
说明:当角度为负数——表示逆时针旋转
当角度为正数——表示顺时针旋转
(负数from——to正数:顺时针旋转
负数from——to负数:逆时针旋转
正数from——to正数:顺时针旋转)
pivotX 为动画相对于物件的X坐标的开始位置
pivotY 为动画相对于物件的Y坐标的开始位置
说明:以上两个属性值 从0%——100%中取值
50%为物件的X或Y方向坐标上的中点位置
长整型类型:
duration 为动画持续时间
说明:时间以毫秒为单位
-->
<rotate
android:duration="3000"
android:fromDegrees="0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toDegrees="+350" />
Animation animationRotate = new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animationRotate.setDuration(3000);
ivAnim.startAnimation(animationRotate);
3、尺寸伸缩动画效果 scale
<!--
尺寸伸缩动画效果 scale
属性:interpolator 指定一个动画的插入器
有三种动画插入器:
accelerate_decelerate_interpolator 加速-减速 动画插入器
accelerate_interpolator 加速-动画插入器
decelerate_interpolator 减速-动画插入器
其他的属于特定的动画效果
浮点型值:
fromXScale 动画起始时 X坐标上的伸缩尺寸
toXScale 动画结束时 X坐标上的伸缩尺寸
fromYScale 动画起始 Y时坐标上的伸缩尺寸
toYScale 动画结束时 Y坐标上的尺寸
说明:以上四种属性值
0.0表示收缩到没有
1.0表示正常无伸缩
值小于1.0表示收缩
值大于1.0表示放大
pivotX 动画相对于物件的X坐标的开始位置
pivotY 动画相对于武将的Y坐标的开始位置
说明:以上两个属性值 从0%-100%中取值
长整型:
duration 动画持续时间
说明:时间以毫秒为单位
布尔型值:
fillAfter 当设置为true,该动画转化在动画结束后被应用
-->
<scale
android:duration="700"
android:fillAfter="false"
android:fromXScale="0.0"
android:fromYScale="0.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.4"
android:toYScale="1.4" />
代码方式:
Animation animationScale = new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animationScale.setDuration(3000);
ivAnim.startAnimation(animationScale);
4、translate 位置转移动画效果
<!--
translate 位置转移动画效果
整型值:
fromXDelta 动画起始时 X坐标上的位置
toXDelta 动画结束时 X坐标上的位置
fromYDelta 动画起始时 Y坐标上的位置
toYDlta 动画结束时 Y坐标上的位置
注意:没有指定fromXTra toXType fromYType toYType 时候,默认是以自己为相对参照物
长整型:duration 为动画持续时间
时间以毫秒为单位
-->
<translate
android:duration="2000"
android:fromXDelta="30"
android:fromYDelta="30"
android:toXDelta="-80"
android:toYDelta="300" />
Animation animationTranslate = new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
animationTranslate.setDuration(3000);
ivAnim.startAnimation(animationTranslate);
xml文件方式使用的话就两行代码
Animation anim = AnimationUtils.loadAnimation(activity, R.anim.anim_xxx);
ivAnim.startAnimation(anim);
5、frame帧动画(文件放在res/drawable)
<!--
根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
根标签下,通过item标签对动画中的每一个图片进行声明
android:duration 表示展示所用的该图片的时间长度
-->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true" >
<item
android:drawable="@drawable/icon_frame1"
android:duration="200">
</item>
<item
android:drawable="@drawable/icon_frame2"
android:duration="200">
</item>
<item
android:drawable="@drawable/icon_frame3"
android:duration="200">
</item>
<item
android:drawable="@drawable/icon_frame4"
android:duration="200">
</item>
<item
android:drawable="@drawable/icon_frame5"
android:duration="200">
</item>
<item
android:drawable="@drawable/icon_frame6"
android:duration="50">
</item>
</animation-list>
xml帧动画使用代码:
ivFrame = (ImageView) findViewById(R.id.iv_frame_image);
ivFrame.setImageResource(R.drawable.anim_frame);
animation = (AnimationDrawable) ivFrame.getDrawable();
animation.setOneShot(false);//循环
animation.start();


猜你喜欢
- 本文实例讲述了Android编程设计模式之迭代器模式。分享给大家供大家参考,具体如下:一、介绍迭代器模式(Iterator Pattern)
- 1.返回String“长度”方法你如何确定给定String的长度?java提供了一种称为“length()”的方法。将它用于您需要查找Str
- 啥都不说先上效果图,这个是我项目里的效果:下面的是我抽取出来的 demo 适配啥的我基本上都做好了没做其他的ok 下面 说一下思路把首先 说
- 一、前序遍历1.题目描述给你二叉树的根节点 root ,返回它节点值的 前序 遍历。2.输入输出示例示例 1:输入:root = [1,nu
- 本文实例讲述了C#动态调用事件的方法。一般来说,传统的思路是,通过Reflection.EventInfo获得事件的信息,然后使用GetRa
- 在开始之前,我先卖个关子提一个问题:假设我们有一个Movie类,这个类有三个成员变量分别是starred(是否收藏), title(电影名称
- 当我们需要制作动态炫酷科技感很强的UI时,美术一般会给我们提供一些序列图,这时候我们只需在程序里实现序列动画。一.动画机unity自带的帧动
- 出现这种错误的原因可能是:1.本机默认使用(编译)的jdk与该项目所使用的jdk版本不同。2.jdk版本不适用于这个Idea,很典型的一个例
- 反射实例化类public class Person{ public string Name { get; set; }publi
- 关于在Android中实现ListView的弹性效果,有很多不同的方法,网上一搜,也有很多,下面贴出在项目中经常用到的两种实现ListVie
- 本文实例讲述了Android实现便于批量操作可多选的图片ListView。分享给大家供大家参考,具体如下:之前项目需要实现一个可多选的图片列
- 相信对于打印三角形都没什么难度,只需要利用for循环嵌套使用就行但是对于打印圆形和三角形不同因为到圆心距离相等的点一般不会横坐标和纵坐标都为
- AndroidStudio打包jar最近更新androidstudio之后发现打包jar不可用了。先看下以前的方法更新后新的用法//Copy
- Android 获取屏幕尺寸实例代码实现代码:/** * <supports-screens * android:smallScr
- 读取本地的xml文件,通过DOM进行解析,DOM解析的特点就是把整个xml文件装载入内存中,形成一颗DOM树形结构,树结构是方便遍历和和操纵
- 1. 准备工作需要提前安装好Elasticsearch,访问地址:http://127.0.0.1:9200/ 得到以下结果,得到clust
- 本文实例为大家分享了Android实现简单垂直进度条的具体代码,供大家参考,具体内容如下代码注释特别清晰,就不多解释了支持属性:progre
- 今天来给大家介绍一个非常有用的Studio Tips,有些时候我们在一个方法内部写了过多的代码,然后想要把一些代码提取出来再放在一个单独的方
- MyBatis一对多的xml配置用的是window上面的画图板,没法以文字的方式展示出来,见谅嵌套查询嵌套结果一对多关联查询xml配置写法
- Android 中解决Viewpage调用notifyDataSetChanged()时界面无刷新的问题问题描述相信很多做过Viewpage