Android动画使用方法总结

本文详细介绍了Android中的三种动画类型:帧动画、补间动画和属性动画。包括每种动画的XML配置方式、Java代码调用方法及适用场景。并强调了不同动画在资源消耗和事件响应方面的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 中动画共三类,分别为:

  • 帧动画(Frame Animation)
  • 补间动画(Tween Animation)
  • 属性动画(Property Animation)

帧动画

<?xml version="1.0" encoding="utf-8"?>
<!--main_loading.xml-->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/a01" android:duration="100" />
<item android:drawable="@drawable/a02" android:duration="100" />
... 省略...
<item android:drawable="@drawable/a08" android:duration="100" />
<item android:drawable="@drawable/a09" android:duration="100" />
</animation-list>

//Java 代码引用
AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.main_loading);
view.setBackground(animationDrawable);
animationDrawable.start();

使用场景
可以实现不规则轨迹动画,作用的对象没有事件要求。一般在加载条场景中应用。
注意事项
移动设备内存有限,图片是内存杀手,当我们在使用帧动画时,一定要控制图片质量,控制图片数量,谨慎编码,否则低内存设备有 OOM 风险。

补间动画

  • 透明度渐变 View
  • 位置移动 View
  • 旋转 View
  • 拉伸 View

补间动画没有真正的修改 View 属性,只是改变了视觉效果而已。

渐变动画

<?xml version="1.0" encoding="utf-8"?>
<!--ptr_alpha.xml-->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="3000"
android:fillAfter="true"
android:fromAlpha="1.0"
android:toAlpha="0.1" />

//Java 代码引用
Animation anim = AnimationUtils.loadAnimation(context, R.anim.ptr_alpha); 
view.startAnimation(anim);

平移动画

<?xml version="1.0" encoding="utf-8"?>
<!--ptr_slide_in_from_bottom.xml-->
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="@android:integer/config_longAnimTime"
android:fromYDelta="100%p"
android:toYDelta="0" />

//Java 代码中引用
Animation bottomToTop = AnimationUtils.loadAnimation(context, R.anim.ptr_slide_in_from_bottom);
view.startAnimation(bottomToTop);

旋转动画

<?xml version="1.0" encoding="utf-8"?>
<!--ptr_rotate.xml-->
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="2000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:toDegrees="360" />

//Java 代码中引用
Animation bottomToTop = AnimationUtils.loadAnimation(this, R.anim.ptr_rotate);
view.startAnimation(bottomToTop);

拉伸动画

<?xml version="1.0" encoding="utf-8"?>
<!--ptr_scale.xml-->
<scale xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromXScale="100%"
android:fromYScale="100%"
android:pivotY="50%"
android:pivotX="50%"
android:repeatCount="infinite"
android:toXScale="150%"
android:toYScale="150%" />

//Java 代表调用
Animation bottomToTop = AnimationUtils.loadAnimation(this, R.anim.ptr_scale);
view.startAnimation(bottomToTop);

使用场景
可以直接作用于 View,使用简单,只是视觉上有动画现象,没有真正修改 View 属性。使用此动画的同时无法响应点击事件,相对帧动画而言比较节省系统资源。
注意事项
点击事件无法与动画同时兼顾,无法实现复杂的动画效果。

属性动画

属性动画是 Android 3.0 后推出的 API,弥补了补间动画执行后其属性不变的问题,不再局限于 View,也不限定于只能实现移动、缩放、旋转和淡入淡出这几种动画操作。
更强大的是上面我们所说的按钮点击事件问题在属性动画上进行了完善、升级,最终展示给用户的不仅仅是视觉上的改变,同时动画对象的属性也进行了设置。如果我们通过属性动画来移动一个按钮,那么这个按钮是真正意义上的移动了,因为动画执行完毕后其所有属性会重新赋值。
下面我们看下属性动画中的两个 API

  • ValueAnimator
  • ObjectAnimator

ValueAnimator

ValueAnimator 是整个属性动画机制中很核心的一个类,其运行机制是通过不断地修改对象的值来实现动画。使用过程中我们只需要将初始值和结束值提供给 ValueAnimator ,并且告诉它动画所需运行的时长,那么 ValueAnimator 就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外 ValueAnimator 还负责管理动画的播放次数、播放模式、以及对动画设置监听器等。

ObjectAnimator

ObjectAnimator 作为 ValueAnimator 的子类,也就是说 ObjectAnimator 具有 ValueAnimator 类几乎所有的函数和属性。同时其内部封装了很多实用的方法,便于研发人员快速实现动画效果。事实证明项目中我们使用 ObjectAnimator 的比重的确偏大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值