android 一分钟倒计时动画,Android View篇之启动页倒计时动画的实现
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篇之启动页倒计时动画的实现相关推荐
- android开发 时间倒计时的启动页,App启动页倒计时功能
示例代码采用 RxJava + RxLifecycle + Data-Binding 模式编写 示例图: 话不多说,实现方式如下: 1.导入依赖库 ① RxJava: Reactive Extensi ...
- Android仿小红书启动页平行动画
实现效果 需要注意的: view.setTag()和view.getTag() View中的setTag(Object)表示给View添加一个格外的数据,以后可以用getTag()将这个数据取出来. ...
- android dialog 隐藏状态栏_Flutter-最近搞了个项目-启动页Splash,Navigator.pop无法关闭Dialog...
上一篇做了个总体简单记录总结 MonkeyLei:Flutter-最近搞了个项目(常用控件,第三方基本库)-底部导航,登录,启动画面,webview等 . 完事了后以为没什么事情,然后点击登录会显示加 ...
- iapp进度条倒计时_App启动页倒计时功能
示例代码采用 RxJava + RxLifecycle + Data-Binding 模式编写 示例图: 话不多说,实现方式如下: 1.导入依赖库 ① RxJava: Reactive Extensi ...
- <android>音乐频谱显示效果 音乐播放动画 自定义view Visualizer 对接MediaPlayer 声音频率 动画效果
最近写了一个音乐频谱显示效果的自定义view,通过Visualizer 函数对接了MediaPlayer的声源byte数据的回调,全部封装到了view的里面,外部只需要设置一个MediaPlayer即 ...
- Android开源项目整理:个性化空间View篇(看遍论坛千万篇,不看此篇也枉然)
个性化View控件虽然你在多处可以找到 但是这个整理的不可以不看欧: 主要介绍不错的个性化View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridVi ...
- 【登录页星空和捂脸动画特效】vue 实现掘金登录页捂脸动画效果,css 实现登录页星空动画流星效果【通俗易懂】
前言: 这里是展示一下做的登录页的一个好看的样式,同时也写了个下掘金登录页很有意思的捂脸小动画怎么实现的,感觉放在一起还挺好看的. 虽然不知道有没有问题,但是还是声明一下:我就是写来学习学习这种设计, ...
- android 弹性动画,Android开发SpringAnimation实现弹性动画
新更新了一个叫做DynamicAnimation(动力学动画??)的类,其中他有一个子类叫做SpringAnimation,官方文档是这样说的: ··· ··· 粗略的翻译一下: 这个类是基于物理学动 ...
- android自适应拉伸图片,Android 启动页-解决图片被拉伸和压缩问题,适配虚拟导航栏...
Android 启动页设置非常简单 //styles.xml 设置主题 @drawable/bg_splash true //activity使用主题,这时点击app图标,就会显示@drawable/ ...
最新文章
- CV05-ResNet笔记
- 20135306黄韧 信息安全系统设计基础期中学习总结
- CSS实现元素居中原理解析
- 绝学:用宏定义找BUG,了解一下?
- php主键自增sql语句,sql语句id自增的问题
- MYSQL 从头开始-1
- 基于 abp vNext 和 .NET Core 开发博客项目
- 今天安利一个超牛叉的黑客入侵的特效网页,我第一次打开就被惊艳到了
- 【Axure PR原型模板】微信公众小程序手机移动端高保真交互原型
- 电脑编程软件都有哪些
- linux 命令行字体发虚,解决Linux字体发虚的终极方法
- MediaWiki 在 CentOS 下的安装使用
- SAS和JBOD基础简介
- Java岗最全面试攻略,吃透这些技术栈Offer拿到手软
- SiTime硅晶振 高性能MEMS时钟方案在5G中的应用
- Java毕业设计之ssm流浪猫狗|流浪狗宠物救助网站
- METATRADER 5 中的订单、持仓和成交
- win10怎么更改账户名称_如何自定义WIN10登陆界面的用户名?
- Maven安装配置全教程
- Excel文件转成MD格式
热门文章
- lzma java sdk,Java LZMA 磁盘与内存压缩实现
- The flowing processes must be stopped before the CUDA Visual studio integration installation can pro
- 关于NOI Linux的IDE及代码调试技巧(OIER必看)
- socket传输案例
- 【Android系统】虚拟按键 平板设备中重叠的问题
- IT程序员的就业前景究竟如何?
- SDH同步数字系列(Synchronous Digital Hierarchy,SDH)--SONET同步光网络(Synchronous Optical NETwork,SONET)
- python自然语言处理 分词_Python 自然语言处理(基于jieba分词和NLTK)
- ppp协议 服务器,PPP(点对点协议(Point to Point Protocol))_百度百科
- 快速分析出京东快递大量单号物流是否延误