Hello,小伙伴们大家好,今天介绍一个很简单的倒计时动画,仿酷狗音乐的启动页倒计时效果,也是大多数APP在用的一个动画,来看看效果图:

在这里插入图片描述

整体的思路就是用一个平滑的帧动画来画圆弧就行了。

这篇文章学到什么?

了解属性动画ValueAnimator的用法

了解动画属性插值Interpolator,让动画过度得更自然

如何画圆弧

开始准备

新建一个类继承TextView,因为中间还有跳过的文本,所以选择用TextView来画个动起来的背景图。

/**

* 倒计时文本

* Created by ChenRui on 2017/10/31 0031 23:01.

*/

public class CountDownTextView extends RaeTextView {

// 倒计时动画时间

private int duration = 5000;

// 动画扫过的角度

private int mSweepAngle = 360;

// 属性动画

private ValueAnimator animator;

// 矩形用来保存位置大小信息

private final RectF mRect = new RectF();

// 圆弧的画笔

private Paint mBackgroundPaint;

public CountDownTextView(Context context) {

super(context);

}

public CountDownTextView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public CountDownTextView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

@Override

void init() {

super.init();

// 设置画笔平滑

mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

// 设置画笔颜色

mBackgroundPaint.setColor(Color.WHITE);

// 设置画笔边框宽度

mBackgroundPaint.setStrokeWidth(dp2px(2));

// 设置画笔样式为边框类型

mBackgroundPaint.setStyle(Paint.Style.STROKE);

}

开始动画

原理: 利用圆的360度角来做属性动画,让它平滑的分配做每帧动画的角度值,然后调用invalidate()来重绘自己本身,从而进入到本身的onDraw()方法来画图。

/**

* 开始倒计时

*/

public void start() {

// 在动画中

if (mSweepAngle != 360) return;

// 初始化属性动画

animator = ValueAnimator.ofInt(mSweepAngle).setDuration(duration);

// 设置插值

animator.setInterpolator(new LinearInterpolator());

// 设置动画监听

animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

// 获取属性动画返回的动画值

mSweepAngle = (int) animation.getAnimatedValue();

// 重绘自己

invalidate();

}

});

// 开始动画

animator.start();

}

画圆弧

画圆弧比较简单, 从效果图来看,有的同学可能刚开始以为要画两个圆,一个背景的内圆和一个白色边框的大圆,其实这里可以利用画笔设置画笔样式paint.setStyle()和宽度大小paint.setStrokeWidth()的特性来实现。代码很简单,开始的角度选择-90,从头顶开始画。这样实现的是一个顺时针的倒计时效果。如果你想实现酷狗的逆时针效果,就控制mSweepAngle的值用mSweepAngle = 360 - mSweepAngle开始就可以了。

@Override

protected void onDraw(Canvas canvas) {

int padding = dp2px(4);

mRect.top = padding;

mRect.left = padding;

mRect.right = getWidth() - padding;

mRect.bottom = getHeight() - padding;

// 画倒计时线内圆

canvas.drawArc(mRect, //弧线所使用的矩形区域大小

-90, //开始角度

mSweepAngle, //扫过的角度

false, //是否使用中心

mBackgroundPaint); // 设置画笔

super.onDraw(canvas);

}

什么是插值动画?

为了让动画过度的更加自然或者添加一些动画效果,比如匀速运动、加速运动、减速运动、弹跳运动等等,这些的动画的效果就是靠插值来实现的。在Android中系统内置了一些插值,这里做下搬运工记录一下。推荐一个能在线运行Interpolator的效果以及数学公式定义的网站 inloop.github.io/interpolato… 更加直观的展示下面介绍的动画效果。

|

插值

说明

LinearInterpolator

以常量速率改变

BounceInterpolator

动画结束的时候弹起

CycleInterpolator

动画循环播放特定的次数,速率改变沿着正弦曲线

DecelerateInterpolator

在动画开始的地方快然后慢

OvershootInterpolator

向前甩一定值后再回到原来位置

AccelerateInterpolator

在动画开始的地方速率改变比较慢,然后开始加速

AnticipateInterpolator

开始的时候向后然后向前甩

AccelerateDecelerateInterpolator

在动画开始与介绍的地方速率改变比较慢,在中间的时候加速

AnticipateOvershootInterpolator

开始的时候向后然后向前甩一定值后返回最后的值

项目使用

这里要定义文本的宽高,因为没有画底部的黑色圆背景,还要设置一下背景图。

android:id="@+id/tv_skip"

style="@style/Widget.AppCompat.Button.Borderless"

android:layout_width="40dp"

android:layout_height="40dp"

android:background="@drawable/bg_count_down"

android:text="跳过"

android:textColor="#ffffff"

android:textSize="12sp" />

背景图

到这里结束啦,希望对你有帮助

喜欢点击+关注哦

android 一分钟倒计时动画,Android View篇之启动页倒计时动画的实现相关推荐

  1. android开发 时间倒计时的启动页,App启动页倒计时功能

    示例代码采用 RxJava + RxLifecycle + Data-Binding 模式编写 示例图: 话不多说,实现方式如下: 1.导入依赖库 ① RxJava: Reactive Extensi ...

  2. Android仿小红书启动页平行动画

    实现效果 需要注意的: view.setTag()和view.getTag() View中的setTag(Object)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来. ...

  3. android dialog 隐藏状态栏_Flutter-最近搞了个项目-启动页Splash,Navigator.pop无法关闭Dialog...

    上一篇做了个总体简单记录总结 MonkeyLei:Flutter-最近搞了个项目(常用控件,第三方基本库)-底部导航,登录,启动画面,webview等 . 完事了后以为没什么事情,然后点击登录会显示加 ...

  4. iapp进度条倒计时_App启动页倒计时功能

    示例代码采用 RxJava + RxLifecycle + Data-Binding 模式编写 示例图: 话不多说,实现方式如下: 1.导入依赖库 ① RxJava: Reactive Extensi ...

  5. <android>音乐频谱显示效果 音乐播放动画 自定义view Visualizer 对接MediaPlayer 声音频率 动画效果

    最近写了一个音乐频谱显示效果的自定义view,通过Visualizer 函数对接了MediaPlayer的声源byte数据的回调,全部封装到了view的里面,外部只需要设置一个MediaPlayer即 ...

  6. Android开源项目整理:个性化空间View篇(看遍论坛千万篇,不看此篇也枉然)

    个性化View控件虽然你在多处可以找到 但是这个整理的不可以不看欧: 主要介绍不错的个性化View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridVi ...

  7. 【登录页星空和捂脸动画特效】vue 实现掘金登录页捂脸动画效果,css 实现登录页星空动画流星效果【通俗易懂】

    前言: 这里是展示一下做的登录页的一个好看的样式,同时也写了个下掘金登录页很有意思的捂脸小动画怎么实现的,感觉放在一起还挺好看的. 虽然不知道有没有问题,但是还是声明一下:我就是写来学习学习这种设计, ...

  8. android 弹性动画,Android开发SpringAnimation实现弹性动画

    新更新了一个叫做DynamicAnimation(动力学动画??)的类,其中他有一个子类叫做SpringAnimation,官方文档是这样说的: ··· ··· 粗略的翻译一下: 这个类是基于物理学动 ...

  9. android自适应拉伸图片,Android 启动页-解决图片被拉伸和压缩问题,适配虚拟导航栏...

    Android 启动页设置非常简单 //styles.xml 设置主题 @drawable/bg_splash true //activity使用主题,这时点击app图标,就会显示@drawable/ ...

最新文章

  1. CV05-ResNet笔记
  2. 20135306黄韧 信息安全系统设计基础期中学习总结
  3. CSS实现元素居中原理解析
  4. 绝学:用宏定义找BUG,了解一下?
  5. php主键自增sql语句,sql语句id自增的问题
  6. MYSQL 从头开始-1
  7. 基于 abp vNext 和 .NET Core 开发博客项目
  8. 今天安利一个超牛叉的黑客入侵的特效网页,我第一次打开就被惊艳到了
  9. 【Axure PR原型模板】微信公众小程序手机移动端高保真交互原型
  10. 电脑编程软件都有哪些
  11. linux 命令行字体发虚,解决Linux字体发虚的终极方法
  12. MediaWiki 在 CentOS 下的安装使用
  13. SAS和JBOD基础简介
  14. Java岗最全面试攻略,吃透这些技术栈Offer拿到手软
  15. SiTime硅晶振 高性能MEMS时钟方案在5G中的应用
  16. Java毕业设计之ssm流浪猫狗|流浪狗宠物救助网站
  17. METATRADER 5 中的订单、持仓和成交
  18. win10怎么更改账户名称_如何自定义WIN10登陆界面的用户名?
  19. Maven安装配置全教程
  20. Excel文件转成MD格式

热门文章

  1. lzma java sdk,Java LZMA 磁盘与内存压缩实现
  2. The flowing processes must be stopped before the CUDA Visual studio integration installation can pro
  3. 关于NOI Linux的IDE及代码调试技巧(OIER必看)
  4. socket传输案例
  5. 【Android系统】虚拟按键 平板设备中重叠的问题
  6. IT程序员的就业前景究竟如何?
  7. SDH同步数字系列(Synchronous Digital Hierarchy,SDH)--SONET同步光网络(Synchronous Optical NETwork,SONET)
  8. python自然语言处理 分词_Python 自然语言处理(基于jieba分词和NLTK)
  9. ppp协议 服务器,PPP(点对点协议(Point to Point Protocol))_百度百科
  10. 快速分析出京东快递大量单号物流是否延误