一、概述
大家好,这篇文章为大家实现一个读数字的动画,非常简单,安卓动画一共有三种:
视图动画(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