Android 循环读数字动画实现
2018-01-06 15:02
260 查看
[b]一、概述[/b]
大家好,这篇文章为大家实现一个读数字的动画,非常简单,安卓动画一共有三种:视图动画(View Animation),帧动画(Frame Animation),属性动画(Property
Animation)
先显示一个效果图(卖家秀~)
[b]二、实现[/b]
下面我们使用属性动画中的Object Animator为例:[b](1)[b]配置权限[/b][/b]
<!-- 相机 -->
<[b]uses-permission
android:name="android.permission.CAMERA"
[/b]/>
<!-- 录音 -->
<[b]uses-permission
android:name="android.permission.RECORD_AUDIO"
[/b]/>
<!-- 视频 -->
<[b]uses-permission
android:name="android.permission.RECORD_VIDEO"
[/b]/>
<!-- 写入内存 -->
<[b]uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"[/b]/>
上面的权限按需求添加即可
[b](2)[b]编写代码[/b][/b]
首先编写一个动画,实现动画监听器,在动画开始时显示数字,根据参数[b]mValidateData[/b]的数字进行循环显示。
我们可以在onCreate中点击某个按钮然后调用stratReadNumberAnimation()这个方法;
//
声明变量
[b]private
[/b]Button
[b]btnStart[/b];
[b]private
[/b]TextView
[b]tvVolume[/b];
[b]private
[/b]ImageView
[b]ivNumber[/b];
//这个是第三方的一个相机,如可不用
[b]private
[/b]CameraPreview
[b]cameraPreview[/b];
[b]private
[/b]File
[b]mVideoFile[/b];
[b]private
[/b]Boolean
[b]isVedioStart
[/b]=
[b]false[/b];
[b]private int
count
[/b]=
0;
[b]private
[/b]String
[b]mValidateData
[/b]=
[b]"123456789"[/b];
[b]private int
counts
[/b]=
[b]mValidateData[/b].length();
// 开始读数字的动画
[b]private void
[/b]stratReadNumberAnimation() {
ObjectAnimator alpha = ObjectAnimator.ofFloat([b]ivNumber[/b],
[b]"alpha"[/b],
0.5f,
1.0f);
ObjectAnimator scaleX = ObjectAnimator.ofFloat([b]ivNumber[/b],
[b]"scaleX"[/b],
0.8f,
1.2f);
ObjectAnimator scaleY = ObjectAnimator.ofFloat([b]ivNumber[/b],
[b]"scaleY"[/b],
0.8f,
1.3f);
AnimatorSet set =
[b]new
[/b]AnimatorSet();
set.addListener([b]animatorListener[/b]);
set.setDuration(2000);
set.playTogether(alpha, scaleX, scaleY);
set.start();
}
//
动画监听器
[b]private
[/b]Animator.AnimatorListener
[b]animatorListener
[/b]=
[b]new
[/b]Animator.AnimatorListener() {
@Override
[b]public void
[/b]onAnimationStart(Animator animation) {
[b]count
[/b]+=
1;
[b]if
[/b]([b]ivNumber[/b].getVisibility()
== View.[b]INVISIBLE[/b])
{
[b]ivNumber[/b].setVisibility(View.[b]VISIBLE[/b]);
}
[b]int
[/b]number = VideoNumber.readChangedNumber([b]mValidateData[/b],
[b]count[/b]);
[b]ivNumber[/b].setImageResource(number);
}
@Override
[b]public void
[/b]onAnimationEnd(Animator animation) {
[b]if
[/b]([b]count
[/b]>=
[b]counts[/b])
{
[b]ivNumber[/b].setVisibility(View.[b]INVISIBLE[/b]);
[b]count
[/b]=
0;
[b]return[/b];
}
//
这里注意一个坑,不能重用那个参数animation,会出现不正确循环
// animation.reset();
// animation.setAnimationListener(animationListener2);
// animation.start();
//重新创建animation循环执行动画
stratReadNumberAnimation();
}
@Override
[b]public void
[/b]onAnimationCancel(Animator animation) {
}
@Override
[b]public void
[/b]onAnimationRepeat(Animator animation) {
}
};
/**
*
这个类是根据传入的显示的数字和次数,进行每次显示不同的数字
*/
[b]public class
[/b]VideoNumber {
[b]public static int
[/b]readChangedNumber(String mValidateData,
[b]int
[/b]count) {
count = count -
1;
//传入count为次数,count作用为坐标,因为坐标从0开始,所以要减1
[b]int
[/b]number = Integer.parseInt(String.valueOf(mValidateData.charAt(count)));
[b]if
[/b](number ==
0) {
[b]return
[/b]R.drawable.[b]image_num0_gold[/b];
}
[b]if
[/b](number ==
1) {
[b]return
[/b]R.drawable.[b]image_num1_gold[/b];
}
[b]if
[/b](number ==
2) {
[b]return
[/b]R.drawable.[b]image_num2_gold[/b];
}
[b]if
[/b](number ==
3) {
[b]return
[/b]R.drawable.[b]image_num3_gold[/b];
}
[b]if
[/b](number ==
4) {
[b]return
[/b]R.drawable.[b]image_num4_gold[/b];
}
[b]if
[/b](number ==
5) {
[b]return
[/b]R.drawable.[b]image_num5_gold[/b];
}
[b]if
[/b](number ==
6) {
[b]return
[/b]R.drawable.[b]image_num6_gold[/b];
}
[b]if
[/b](number ==
7) {
[b]return
[/b]R.drawable.[b]image_num7_gold[/b];
}
[b]if
[/b](number ==
8) {
[b]return
[/b]R.drawable.[b]image_num8_gold[/b];
}
[b]if
[/b](number ==
9) {
[b]return
[/b]R.drawable.[b]image_num9_gold[/b];
}
[b]return
[/b]-1;
}
}
至此,一个简单的动画就完成啦~~
三、附加
有了录音读数字,是不是需要获取录音的音量大小呢?完整项目获取了音量大小,大家还可以对音量大小进行显示不同的图标~~
源码地址:https://github.com/18824153269/Animator
相关文章推荐
- Android实现动画循环的方式
- Android学习——自定义利用Scroller实现可循环滚动的动画菜单控件(功能完善待改进)
- Android 仿余额宝数字动画实现
- Android属性动画实现TextView类似支付宝余额数字滚动
- Android 仿余额宝数字动画实现
- Android实现循环平移动画示例
- 【Android游戏开发二十二】(图文详解)游戏中灵活实现动画播放!简述J2me的游戏类库与Android游戏开发!
- 【Android游戏开发二十二】(图文详解)游戏中灵活实现动画播放! 推荐
- Android gallery实现图片的左右循环旋转源码分享
- Android Gallery实现循环显示图像
- Android逐条加载ListView,实现动画更新
- Android应用程序入门 推箱子游戏开发(一) surfaceView 实现动画效果
- Android实现带动画效果的Tab Menu
- Android游戏开发学习笔记(一):tweened animation自定义动画的实现
- Android gallery实现图片的左右循环旋转源码分享
- Android游戏开发之Tween动画的实现(三十二)
- Android游戏开发之Tween动画的实现(三十二)
- [Android][UI]模拟器启动界面动画效果的简单实现
- Android进阶:实现android系统自带查看照片动画效果 类似Gallery手势滑动
- Android实现3个圆圈的动画