最近在产品迭代中发现有些系统的提示不够醒目,让用户容易忽略,为了不影响原来的界面布局,所以考虑到用动画的效果来加大提醒的效果,正好以前也没用到过动画这块,所谓边学边做嘛。
Android的动画总体可以分为三类:View动画、帧动画、属性动画。
我们这里主要就是介绍属性动画,主要原画是现在属性动画是使用率最高的,并且可以实现一个按钮的背景色从绿色到红色的效果,而View动画和帧动画这个是无法实现的。属性动画不仅仅针对View对象,还可以对任意对象的属性进行动画效果,在某一段时间内,实现对象的属性值从起始值到最终值的变化。
属性动画也分为动画的组合动画,我们这篇主要先讲一下动画(ValueAnimator),组合动画会在后面的文章中介绍。
ValueAnimator 算不上实现动画,ObjectAnimator 和TimeAnimator 继承自 ValueAnimator,一般由前者 ObjectAnimator 和 TimeAnimator 来实现动画,一般动画的实现过程如下图
ValueAnimator相关参数
方法 | 参数名 | 说明 |
---|---|---|
setEvaluator | TypeEvaluator value | 设置估值器 |
setDuration | long duration | 设置持续时间 |
setInterpolator | Interpolator value | 设置插值器 |
setTarget | Object target | 设置目标对象 |
setRepeatCount | int value | 设置重复次数 |
setRepeatMode | int value | 设置重复模式 |
setStartDelay | long startDelay | 设置启动延时 |
setCurrentPlayTime | long playTime | 设置当前执行时间 |
上面表格中的方法我只列出来比较常用的,其余的可以在实际操作中自己查找应用。
ViewAnimator的变化值类型确定主要有是下面四种:
代码语言:javascript复制public static ValueAnimator ofInt(int... values) public static ValueAnimator ofFloat(int... values)public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values)
public static ValueAnimator ofPropertyValuesHolder(PropertyValuesHolder... values)
实现ViewAnimator的方法我们用到最多的就是ObjectAnimator,ObjectAnimator 有很多实现动画的方法,一般我们使用 ofFloat() 方法:
代码语言:javascript复制public static ObjectAnimator ofFloat(Object target, String propertyName, float... values) {
throw new RuntimeException("Stub!");
}
参数名 | 说明 |
---|---|
target | 属性动画作用的对象 |
propertyName | 属性名,代表要做什么动画 |
values | 形参,一般来说是传入两个参数,代表从..到.. |
代码实现
Code implementation
上面介绍了这么多,下面我们就自己创建个项目来做一个简单的实现。新建一个Android的程序名为Animation的项目,布局文件中加入两个Button和一个TextView。
代码语言:javascript复制<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@ id/tvshow"
android:layout_below="@ id/btntest1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test1"
android:id="@ id/btntest1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@ id/btntest1"
android:text="test2"
android:id="@ id/btntest2"/>
</RelativeLayout>
然后我们在MainActivity中定义TextView名为tvshow,下面是创建一个动画的函数AnimationOne(),下面方法我们就是让tvshow在X轴方法(横向)从1缩放到40的效果,播放时长为2秒,播放完后再回放变为最初效果。
代码语言:javascript复制private void AnimationOne() {
ValueAnimator animator=ObjectAnimator.ofFloat(tvshow, "scaleX", 1f, 40f);
//设置动画的基础属性
animator.setDuration(2000);//播放时长
animator.setStartDelay(300);//延迟播放
animator.setRepeatCount(1);//重放次数
//重放模式
//ValueAnimator.START:正序
//ValueAnimator.REVERSE:倒序
animator.setRepeatMode(ValueAnimator.REVERSE);
animator.start();
}
点击第一个按钮加入调用事件
接下来我们看看运行效果