Android 动画 ValueAnimator(一)

本文详细解析了Android动画中的两种类型:ViewAnimation和PropertyAnimator,并重点介绍了ValueAnimator的使用方法及实例应用。

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

一.概述

在Android动画中,总共有两种类型的动画View Animation(视图动画)和Property Animator(属性动画);
其中
View Animation包括Tween Animation(补间动画)和Frame Animation(逐帧动画);
Property Animator包括ValueAnimator和ObjectAnimation;

大家都知道逐帧动画主要是用来实现动画的,而补间动画才能实现控件的渐入渐出、移动、旋转和缩放的;而Property Animator是在Android 3.0版本才引入的,之前是没有的。大家可能会觉得补间动画和逐帧动画已经很全了,为什么还要引入Property Animator呢?

1.Property Animator能实现补间动画无法实现的功能(将一个控件的背景色在一分钟内从红色变为绿色)
2.补间动画虽能对控件做动画,但并没有改变控件内部的属性值。而Property Animator则是恰恰相反,Property Animator是通过改变控件内部的属性值来达到动画效果的

这篇文章我们主要讲讲ValueAnimator是如何使用的。

二.使用

ValueAnimator从名字可以看出,这个Animation是针对值的!ValueAnimator不会对控件做任何操作,我们可以给它设定从哪个值运动到哪个值,通过监听这些值的渐变过程来自己操作控件。
1.初步使用ValueAnimator
第一步:创建实例

 ValueAnimator animator = ValueAnimator.ofInt(0,400);
        animator.setDuration(1000);

在这里我们利用ValueAnimator.ofInt创建了一个值从0到400的动画,动画时长是1s,然后让动画开始。从这段代码中可以看出,ValueAnimator没有跟任何的控件相关联,那也正好说明ValueAnimator只是对值做动画运算,而不是针对控件的,我们需要监听ValueAnimator的动画过程来自己对控件做操作。

第二步:添加监听

 animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
               int value = (int) valueAnimator.getAnimatedValue();
                System.out.println("==========value: "+value);
            }
        });
        animator.start();

上面我们使用addUpdateListener添加了一个监听,在onAnimationUpdate方法中我们可以通过当前的valueAnimator对象拿到当前的值。
这里写图片描述

这就是ValueAnimator的功能:ValueAnimator对指定值区间做动画运算,我们通过对运算过程做监听来自己操作控件。
总而言之就是两点:

ValueAnimator只负责对指定的数字区间进行动画运算
我们需要对运算过程进行监听,然后自己对控件做动画操作
2.实例

下面我们用valueAnimator做一个动画

这里写图片描述

public class MainActivity extends Activity {

    private TextView textView;
    private ValueAnimator animator;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView) findViewById(R.id.textview);
        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "点击了", Toast.LENGTH_SHORT).show();
            }
        });
         animator = ValueAnimator.ofInt(0,400);
        animator.setDuration(1000);
    }
    public void start(View view){
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
               int value = (int) valueAnimator.getAnimatedValue();
                textView.layout(value,value,value+textView.getWidth(),value+textView.getHeight());
            }
        });
        animator.start();
    }
}

在监听过程中,我们通过layout来改变文字的文职,layout方法是用来真实改变组件的位置的,所以我们能看到当文字移动到结束位置时,还是可以点击的,layout中的四个参数分别是按照屏幕坐标来计算的,所以我们的文本从(0,0)移动到(400,400)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值