Android动画的使用(一):补间动画与逐帧动画
来源:互联网 发布:电脑裁板锯用软件 编辑:程序博客网 时间:2024/05/18 02:26
一.逐帧动画
逐帧动画是最简单的动画,就是把一组图片一张一张的播放,组成一个动画,类似于gif图片。不多说,直接看用法。
1.定义xml文件
在res资源文件夹下新建文件夹anim,然后新建xml文件frame_anim.xml
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/frampree0" android:duration="100"/> <item android:drawable="@drawable/frampree1" android:duration="100"/> <item android:drawable="@drawable/frampree2" android:duration="100"/> <item android:drawable="@drawable/frampree3" android:duration="100"/> <item android:drawable="@drawable/frampree4" android:duration="100"/> <item android:drawable="@drawable/frampree5" android:duration="100"/> <item android:drawable="@drawable/frampree6" android:duration="100"/> <item android:drawable="@drawable/frampree7" android:duration="100"/> <item android:drawable="@drawable/frampree8" android:duration="100"/> <item android:drawable="@drawable/frampree9" android:duration="100"/> <item android:drawable="@drawable/frampree10" android:duration="100"/> <item android:drawable="@drawable/frampree11" android:duration="100"/></animation-list>
frampree0-11是资源图片,即动画的12帧,duration表示这一帧持续的时间,加起来这动画就是1200ms,播放动画时将按照排列顺序播放。android:oneshot属性true表示动画运行一次,false表示周期性运行,不写默认为false.
2.逐帧动画使用
第一种方法:可以直接将上面定义好的动画资源引用给ImageView,类似这样。
<ImageView android:id="@+id/anim_img" android:layout_width="100dp" android:layout_height="100dp" android:src="@anim/frame_anim"/>
直接运行就可以看到效果了。
第二种方法:java代码中赋值
ImageView framview = (ImageView)findViewById(R.id.anim_img) framview.setImageResource(R.anim.prepross); //获取动画资源实行控制 AnimationDrawable animationDrawable = (AnimationDrawable) framview.getDrawable(); animationDrawable.start();//启动 //animationDrawable.stop();//停止
二、补间动画
补间动画有四种:平移(translate)、旋转(rotate)、缩放(scale)和透明度渐变(alpha)
动画资源xml定义
动画资源定义都是在xml中定义,我们全部放到res/anim文件夹下。
1.平移动画(translate)
<set xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 平移 --> <translate android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="860" android:toYDelta="0" android:fillAfter="true" android:repeatMode="reverse" android:repeatCount="1" android:duration="2000"/></set>
参数解释:
- fromXDelta 和 fromYDelta 表示平移动画的起始坐标(屏幕左上角为(0,0),向右是x增加,向下是y增加)。
- toXDelta 和 toYDelta 表示平移动画的终点坐标。
- fillAfter 表示是否停止在终点位置
- repeatMode 表示动画怎么循环播放,reverse是原地返回。restart表示重新开始。
- repeatCount 表示循环次数。
- duration 表示一次动画周期。
意思就是从起始坐标向终点坐标平移,平移消耗的时间是2000.
2.旋转动画(rotate)
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <rotate android:duration="2000" android:fromDegrees="0" android:interpolator="@android:anim/accelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toDegrees="720" /></set>
参数解释:
- duration 表示一次动画周期。
- fromDegrees 起始角度。
- interpolator 表示变化的快慢。是一个函数叫插值器。accelerate_interpolator是变换越来越快
- toDegrees 终止角度。就是从fromDegrees到toDegrees进行旋转。
- repeatMode 表示动画怎么循环播放,reverse是原地返回。restart表示重新开始。
- repeatCount 表示循环次数。
- duration 表示一次动画周期。
- pivotX,pivotY 表示变换的原点,就是说这点的位置不变,50%就是中间,然后以此点为中心进行旋转。
3.缩放动画(scale)
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <!-- 缩放图像,放大两倍再还原 --> <scale android:duration="2000" android:fillAfter="true" android:fromYScale="1" android:interpolator="@android:anim/decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:repeatCount="1" android:repeatMode="reverse" android:toXScale="2.0" android:toYScale="2.0" /></set>
参数解释:
- fromYScale,fromXScale 表示y轴,x轴比例,开始时一般为1.
- toXScale,toYScale 表示变换后的比例。x轴y轴比例都从1到2,就是整个图片放大2倍。只有一个轴比例变化,就是拉长了。
- interpolator 表示变化的快慢。是一个函数叫插值器。decelerate_interpolator是变换越来越慢。
- pivotX,pivotY 表示变换的原点,就是说这点的位置不变,50%就是中间,然后以此点为中心,其上下左右缩放。
4.透明度渐变动画(alpha)
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 透明度渐变 --> <alpha android:fromAlpha="1" android:toAlpha="0" android:fillAfter="true" android:repeatMode="reverse" android:repeatCount="1" android:duration="2000" /></set>
属性解释
- fromAlpha 表示开始透明度
- toAlpha 表示终点透明度
- fillAfter 表示是否保持终点形态
- repeatMode 表示动画怎么循环播放,reverse是原地返回。restart表示重新开始。
- repeatCount 表示循环次数。
- duration 表示一次动画周期。
动画就是开始透明度向终点透明度变化
5.组合动画
就是将上面的动画放到一起,随意组合,播放时将同时播放,通过设置startOffset可以让动画控制其播放时间。
下面就是边缩放边旋转。而旋转是顺时针旋转720度后再逆时针旋转360度。
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <rotate android:duration="2000" android:fromDegrees="0" android:interpolator="@android:anim/accelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:toDegrees="720" /> <rotate android:duration="2000" android:fromDegrees="360" android:interpolator="@android:anim/accelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:startOffset="2000" android:toDegrees="0" /> <!-- 缩放图像,放大两倍再还原 --> <scale android:duration="2000" android:fillAfter="true" android:fromYScale="1" android:interpolator="@android:anim/decelerate_interpolator" android:pivotX="50%" android:pivotY="50%" android:repeatCount="1" android:repeatMode="reverse" android:toXScale="2.0" android:toYScale="2.0" /></set>
2.补间动画使用
//可以加载上面定义的任意一个动画Animation animation = AnimationUtils.loadAnimation(this, R.anim.anim_rotate);//让组件启动这个动画,然后就这个组件就按照动画定义那样动起来了。TextView tvhello = (TextView) findViewById(R.id.hello);tvhello.startAnimation(animation);
interpolator
interpolator翻译为插值器,我们定义动画时都是定义了开始状态和结束状态,而中间的状态由这个插值器进行插值。duration定义了这个动画的时间,默认这个时间是匀速变化的。然后interpolator就是在这期间对这个时间流逝的百分比(0-1之间)进行修改。(虽然不可思议,但他就是对时间的修改,进而控制过程),比如
interpolator改成2*a,然后变化曲线就变了,这样就是加快了速度(y=x和y=2x的区别),下一篇将介绍自定义interpolator,那么就会有直观的认识了。
这里介绍常用的interpolator
decelerate_interpolator 减速
accelerate_interpolator 加速
accelerate_decelerate_interpolator 先快后慢
cycle_interpolator 用于周期性动画,速率是正弦变化的
bounce_interpolator 弹球效果,在结束时回弹
linear_interpolator 匀速
- Android动画的使用(一):补间动画与逐帧动画
- Android中的帧动画与补间动画的使用
- Android动画 帧动画、补间动画、属性动画 (一)
- Android帧动画与补间动画
- Android 动画(一)帧动画、补间动画
- android动画 -- 帧动画 补间动画
- Android动画-帧动画&补间动画
- Android 逐帧动画&补间动画
- Android的帧动画、补间动画、属性动画
- Android中的动画,逐帧动画,补间动画
- Android动画--逐帧动画和补间动画简单介绍和基本用法(一)
- Android动画解析(一)-----逐帧动画和补间动画
- android中的动画:帧动画、补间动画、属性动画
- Android动画:帧动画、补间动画、属性动画
- Android动画 帧动画、补间动画、属性动画 (二)
- Android动画基础之补间动画与逐帧动画
- Android动画(一):View动画(补间动画)
- 补间动画与帧动画
- Http协议和tomcat目录个人总结
- string 与char* char[]之间的转换
- 【PAT甲级】1054. The Dominant Color (20)
- c++语法之冒号(:),双冒号(::)
- Tagview(LinearLayout 动态添加子Button,并自动换行 )
- Android动画的使用(一):补间动画与逐帧动画
- 如何提高自己的iOS开发水平(转自唐巧的博客)
- MJRefreshFooter明杰刷新控件结束加载显示“没有更多内容”
- 深度学习之(八)Twitter情感分析
- java使用 ArrayList 的增删改(Java面向对象基础练习)
- VS的.props工程属性文件的使用
- h3c和cisco开snmp
- eclipse打开一个文件后闪退(注意不是启动就闪退,是启动后打开某些类或者配置文件会闪退)解决办法
- 在RAC 中解决 vipca 和 srvctl 无法执行的错误