Android 循环读数字动画实现

一、概述

大家好,这篇文章为大家实现一个读数字的动画,非常简单,安卓动画一共有三种:

视图动画(View Animation),帧动画(Frame Animation),属性动画(Property Animation

先显示一个效果图(卖家秀~

 

 

二、实现

下面我们使用属性动画中的Object Animator为例:

(1)配置权限

<!-- 相机 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 录音 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<!-- 视频 -->
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<!-- 写入内存 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

上面的权限按需求添加即可

 

(2)编写代码

 

首先编写一个动画,实现动画监听器,在动画开始时显示数字,根据参数mValidateData的数字进行循环显示。

我们可以在onCreate中点击某个按钮然后调用stratReadNumberAnimation()这个方法;

// 声明变量

private Button btnStart;
private TextView tvVolume;
private ImageView ivNumber;

 

//这个是第三方的一个相机,如可不用
private CameraPreview cameraPreview; 
private File mVideoFile;
private Boolean isVedioStart = false;

private int count = 0;

private String mValidateData = "123456789";
private int counts = mValidateData.length();

 

// 开始读数字的动画
private void stratReadNumberAnimation() {
    ObjectAnimator alpha = ObjectAnimator.ofFloat(ivNumber, "alpha", 0.5f, 1.0f);
    ObjectAnimator scaleX = ObjectAnimator.ofFloat(ivNumber, "scaleX", 0.8f, 1.2f);
    ObjectAnimator scaleY = ObjectAnimator.ofFloat(ivNumber, "scaleY", 0.8f, 1.3f);
    AnimatorSet set = new AnimatorSet();
    set.addListener(animatorListener);
    set.setDuration(2000);
    set.playTogether(alpha, scaleX, scaleY);
    set.start();
}

 

// 动画监听器

private Animator.AnimatorListener animatorListener = new Animator.AnimatorListener() {

    @Override
    public void onAnimationStart(Animator animation) {
        count += 1;
        
if (ivNumber.getVisibility() == View.INVISIBLE) {
      ivNumber.setVisibility(View.VISIBLE);
        }
        int number = VideoNumber.readChangedNumber(mValidateData, count);
        ivNumber.setImageResource(number);
    }

    @Override
    public void onAnimationEnd(Animator animation) {
        if (count >= counts) {
            ivNumber.setVisibility(View.INVISIBLE);
            count = 0;
            return;
        }

 //    这里注意一个坑,不能重用那个参数animation会出现不正确循环
//            animation.reset();
//            animation.setAnimationListener(animationListener2);
//            animation.start();


//重新创建animation循环执行动画
        stratReadNumberAnimation(); 
    }

    @Override
    public void onAnimationCancel(Animator animation) {
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
    }
};

 

/**
 * 这个类是根据传入的显示的数字和次数,进行每次显示不同的数字
 */

public class VideoNumber {

    public static int readChangedNumber(String mValidateData, int count) {
        count = count - 1; //传入count为次数,count作用为坐标,因为坐标从0开始,所以要减1
        
int number = Integer.parseInt(String.valueOf(mValidateData.charAt(count)));

        if (number == 0) {
            return R.drawable.image_num0_gold;
        }
        if (number == 1) {
            return R.drawable.image_num1_gold;
        }
        if (number == 2) {
            return R.drawable.image_num2_gold;
        }
        if (number == 3) {
            return R.drawable.image_num3_gold;
        }
        if (number == 4) {
            return R.drawable.image_num4_gold;
        }
        if (number == 5) {
            return R.drawable.image_num5_gold;
        }
        if (number == 6) {
            return R.drawable.image_num6_gold;
        }
        if (number == 7) {
            return R.drawable.image_num7_gold;
        }
        if (number == 8) {
            return R.drawable.image_num8_gold;
        }
        if (number == 9) {
            return R.drawable.image_num9_gold;
        }
        return -1;
    }
}

 

至此,一个简单的动画就完成啦~~


三、附加

有了录音读数字,是不是需要获取录音的音量大小呢?完整项目获取了音量大小,大家还可以对音量大小进行显示不同的图标~~

源码地址:https://github.com/18824153269/Animator


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值