学习|Android属性动画的基础介绍

2019-11-14 16:38:14 浏览数 (1)

最近在产品迭代中发现有些系统的提示不够醒目,让用户容易忽略,为了不影响原来的界面布局,所以考虑到用动画的效果来加大提醒的效果,正好以前也没用到过动画这块,所谓边学边做嘛。

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();
    }

点击第一个按钮加入调用事件

接下来我们看看运行效果

0 人点赞