目前Android平台提供了两类动画一类是Tween动画,第二类就是 Frame动画,具体内容介绍请看下文:
一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转、平移、放缩和渐变)。
第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似。
实现动画有两种方式:一种使用XML文件(文件放在res/anim),一种直接代码搞定
1、透明度控制动画效果alpha
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<!-- 透明度控制动画效果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旋转动画
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<!-- 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<!-- 尺寸伸缩动画效果 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" /> |
1
|
|
代码方式:
1
2
3
|
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 位置转移动画效果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<!-- 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<!-- 根标签为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帧动画使用代码:
1
2
3
4
5
|
ivFrame = (ImageView) findViewById(R.id.iv_frame_image); ivFrame.setImageResource(R.drawable.anim_frame); animation = (AnimationDrawable) ivFrame.getDrawable(); animation.setOneShot( false ); //循环 animation.start(); |
以上就是针对Android实现动画效果的全部内容,希望大家能够喜欢。