技术标签: ScrollNumber java android 安卓开发
数字播放组件比较有名的是wuhaojie 编写的ScrollNumber。项目中就是基于此控件进行的定制和优化。
项目需要进行的一些需求:
1)需要设置数字的背景资源,数字和文字的背景资源不相同;
2)需要支持文字型的数字,例如“200亿50万”,数字滚动过程可能出现位数的增加和减少。
例如“9999”变化为“1万200”。
3)动画播放的特殊支持,例如:动画播放时从低位逐个开始播放,然后依次从高位开始停止。
1.0 ScrollNumber介绍
1.0.1 核心控件类
ScrollNumber包含两个核心类ScrollNumber和MultiScrollNumber。项目中最主要就是
对这两个类的优化和功能扩充。
ScrollNumber:单个数字的播放子控件,实现一个数字动画播放,例如从 1--》2。
这是一个内部使用类。
外部调用方法:setNumberChar:设置当前播放的起始数字和结束数字。
以及一些属性的设置方法: setTextSize:设置数字的字体大小
setUnitTextSize:设置文字的字体大小 等
MultiScrollNumber:数字播放器,通过多个ScrollNumber的组合实现数字的播放功能。
一个数字字符对应于一个ScrollNumber。例如“9000”播放到“9100”需要使用四个ScrollNumber。
外部使用方法:
setNumber:设置需要播放的数字(起始数字和目标数字),未设置起始数字默认时把
上一次播放的目标数字作为起始数字。只设置数字,不进行动画播放。播放使用play 方法。
这种方式适合
初始化和播放分开使用的模式。
ScrollNumber支持设置背景资源。
setNumberWithAnimation:设置数字并且进行动画播放。
setScrollAnimationMode:设置动画播放的模式。提供了五种模式:
START_FIRST_ARRIVAL_LAST:低位先启动低位后到达;
START_ARRIVAL_SAME_TIME:低位和高位同时启动同时到达
START_FIRST_ARRIVAL_FIRST:低位先启动低位先到达
CALENDAR: 台历模式。只有变化的位播放动画,按照数字顺序播放 0—>1-->2--->9-->0
SCOREBOARD:记分牌模式,只有变化的位播放动画,按照数字大小逐个递增或者逐个递减。
例如 3-->1 那么变化为3-->2-->1;而1-->3 为1-->2-->3。
1.0.2 数字动画播放规则
数字向上滚动时,例如数字从 0-->1。
canvas.translate(0, mOffset * getMeasuredHeight());
drawSelf(canvas);
drawNext(canvas);
mOffset是位置偏移量百分比。当前数字是0,下一个数字是1,两者位置
0
------ ---->
1
------
通过偏移量,实现当前数字和下一个数字同步向上移动,当当前数字完全移除时(超过100%),
进入下一个数字。
1.0.3 动画播放加速器
采用标准的加速器,当然也可以自定义加速器。
1.0.4 动画播放模式的实现
因为项目要采用低位先启动,高位先到达的模式。要实现这个模式,算法上折腾了两天。
开始采用加速器调节,发现不能完全保证高位先到达;
后来又通过调整每个数字的移动百分比来实现,发现效果仍然不能完全正确;
才来采用了相同加速器和相同移动百分比,通过调整数字播放的步长来实现了。
即低位播放的数字步长多,因此播放时间长,高位播放步长少,因此播放时间端,先到达。
2.0 数字滚动变化规则
2.0.1 数字字符、文字字符滚动变化规则
* 1)数字切换到数字 0-->1-->2-->3-->4-->5-->6-->7-->8-->9
* 2)数字(文字或空白字符)切换到文字 文字-->文字
* 3)文字(空白字符)切换到数字 文字-->0...->数字
* 4)数字切换到无(空白字符) 数字-->消失(父类移除当前节点)
* 5)文字切换到无(空白字符) 文字-->消失(父类移除移除当前节点)
2.0.2 数字的格式化算法
格式化算法采用的按文字分组格式化算法。例如起始数字 100亿10,目标数字 101亿1万,
起始数字按照文字分组,分为两组 100亿 和 10两组, 目标数字也分为两组 101亿 和 1万两组,
1)每一个分组中 数字和数字对齐,位数不够高位补齐;文字和文字对话,数字补0,文字补空。
起始数字和目标数字格式化结果
100亿10空
101亿01万
2)起始数字存在目标数字对应项为空是,滚动过程此项将移除。
3)起始数字对应项为空,目标数字存在且为数字字符,起始数字可初始化为0。
项目请参考GitHub:
https://github.com/joedan0104/ScrollNumber
前言相信每位程序员对mysql应该都不陌生,MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。我们在日常开发中少不了要接触mysql。腾讯云上的mysql实例,初始化的时候,需要自己点击“初始化按钮”,然后还要手动输入16位复杂的密码,这个操作比较繁琐,而且如果你一次建立多个实例,这个操作量就很大了,所以必须想办法提高效率,于是就有了下文,批...
1.安装配置:yum install ansible主配置文件:/etc/ansible/ansible.cfg主机清单:/etc/ansible/hosts三个主程序:ansible,absible-doc,ansible-playbook2.定义主机清单:vim /etc/ansible/hosts可按组来分类3.使用ssh秘钥分发至定义好的主机:ss...
谷歌云端 GCP Cloud Engineering - 第一篇 - 平台交互谷歌云端平台GCP简介二级目录三级目录1. 谷歌云端平台GCP资源层次结构2. VPC Network3. 存储与数据库Cloud Storage和Cloud BigtableCloud SQL和Cloud Spanner容器,K8S, 与K8S Engine4. --- App Engine云开发谷歌云端平台GCP简...
最新版的mudOS 源代码可以在官方网站 http://www.mudos.org下载, 版本号为v22.2b14. 不过该网站最后更新是1-Jun-2005,看开作者已经放弃维护了。 国内还有一个版本是最经典的,可以在windows系统下编译。 Mudos V22pre11 for WIN95/NT with COM extension 、由清华大学计算机系王文军,周霖
大致执行过程:首先获取当前数组存取元素,然后找我们要插入数据的下标值,找到了直接返回false,没找到的话,上锁,再次判断数组是否发生变化,这里多一次判断,我认为是为了防止这种可能性的出现:在判断完是否存在元素和加锁之间,另一个线程加入了我们要加的元素,不判断的话,那么同一个元素就有可能出现俩次,违背了addIfAbsent的意愿。加锁之后,如果数组并没有变的话,那么就执行CopyOnWrite...
主要根据大津法的论文推导公式进行了详细扩展,动动脑筋活动一下假期里的思想。
第一步:requests get请求# -*- coding:utf-8 -*-# 日期:2018/5/15 17:46# Author:小鼠标import requestsurl = "http://www.baidu.com"#res = requests.get(url) #方法1res = requests.request('get',url)...
keras是基于Tensorflow等的一个神经网络的上层框架,通过Keras我们可以简单的构造出自己的神经网络,同时Keras针对主流的算法框架、激活函数和优化函数等进行自己的实现,某些方面只需要我们进行简单的调用,Keras的出现大大简化了网络构建的成本。Keras自定义网络层需要一下步骤:1、继承一个Layerkeras顶级Layer类定义在engine包的base_laye...
ExpandableListView是可扩展的下拉列表,它的可扩展性在于点击父item可以拉下或收起列表,适用于一些场景的使用
Given a linked list, swap every two adjacent nodes and return its head.You may not modify the values in the list's nodes, only nodes itself may be changed. Example:Given 1->2->3->4, y...
1. 世界著名的三大科技文献检索系统SCI(科学引文索引)、EI(工程索引)、CPCI(原名为ISTP)(科技会议录索引)1.1 SCI(科学引文索引 )1.1.1 SCI的由来说到SCI就必须论及一家与此有关的美国公司— The Institute for Scientific Information(简称ISI),其汉语译名是“科技信息研究所”。ISI是由加菲尔德(Eugene Garfield)于1958年在美国费城创办的。加菲尔德于1925年出生于纽约市,是文献计量学和科学计量学创始人之一。
64位系统 system32 和 syswow64\Windows\SysWOW64 文件夹下存放32位的库和应用程序 (WOW64 == Windows on Windows 64 bit )\Windows\System32 文件夹下存放64位的库和应用程序 当安装32位的程序在64位系统上时,会把指定拷贝到system32的文件自动改为拷贝到SysWOW64下。