数字滚轮ScrollNumber_数字拨轮 控件_烟雨江南aabb的博客-程序员秘密

技术标签: 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






版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/joedan0104/article/details/55271175

智能推荐

土壤因子-中国和世界土壤因子数据说明和下载链接_土壤因子单位_生信小窝的博客-程序员秘密

中国土壤类型空间分布数据,数据来源于Hamonized World Soil Database (version 1.1), 2009年,数据联合国粮农组织(FAO)和维也纳国际应用系统研究所(IIASA)所构建的世界土壤数据库(Harmonized World Soil Database version 1.1 )(HWSD). 中国境内数据源是中科院所土壤所提供的1:100万土壤数据。 该数据可为建模者提供模型输入参数,农业角度可用来研究生态农业分区,粮食安全和气候变化等。数据格式:img栅格格式,投

OpenTLD 未完成 - 虎头_猫山王的博客-程序员秘密

TLD是一种算法的简称,原作者把它叫做Tracking-Learning-Detection。搞视觉的人看到这个名字都会吓一跳,很ambitious的计划。是09年的工作,不算太久,不过也不太新。网上关于这个的资源其实很多,很大程度和作者开放源代码有关。学习过程中碰到的第一个问题就是资源太多---当然是相对这个领域而言,一般能找到一个忠实再现算法的源码就已经很好了。所以把找到的list

湖南农业大学计算机专业考研大纲,湖南农业大学842信息化概论2020年考研专业课初试大纲..._weixin_39959298的博客-程序员秘密

硕士研究生入学考试科目《信息化概论》考试大纲Ⅰ.考试性质《信息化概论》是报考农业工程与信息技术领域农业硕士的考试科目,《信息化概论》入学考试是为招收农业工程与信息技术硕士研究生而实施的具有选拔功能的水平考试。目的是为国家选拔具有较强分析问题和解决问题能力的高层次农业信息化人才,并保证选拔的人才具有利用信息技术推动现代农业发展的能力。Ⅱ. 考查目标《信息化概论》侧重于信息化基础理论、技能和信息化技术...

阿里云服务器如何开放端口--转载_zuoseve01的博客-程序员秘密

阿里云服务器如何开放端口,这里我将开放8082端口,我们来看下吧方法/步骤 登录阿里云服务器并进入控制台,点击【云服务器ECS】。 在【云服务器ECS】点击【实例】并跳转到实例列表。 在实例列表找到要开放端口的云服务器实例。并点击后面的【更多】--》【网络和安全组】--》【安全组配置】。 在【本实例安全组】内点击【配置规则】打开【安全组规则】。这里有出\入的方向,这里我开放的是8082端口,属于入方向的。在这里可以新增规则,这里为了方便直接对已有的规

Socket原理详解_ts socket事件_加油努力4ever的博客-程序员秘密

1. 网络中进程之间如何通信进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有:消息(message)、共享存储区(shared memory)和...

随便推点

1036: [ZJOI2008]树的统计Count (基于点的树链剖分)__bubble的博客-程序员秘密

处理点的树链剖分。支持单点更新,树上求最值和树上求和。注意的地方:记录树上的点在线段树的位置的同时,也要记录线段树的某个位置是树上哪个点。因为线段树建树的时候是按照线性从左往右的,需要知道每个位置的点是哪个。

JFinal开发框架一_jbolt前端路由配置_langao_的博客-程序员秘密

一、JFinal简介JFinal是基于Java的极速WEB+ORM框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。官网:http://www.jfinal.com/特点:轻量级开发框架 类似springboot,mvc架构,零配置 无xml,Db+Record模式,ActiveRecord支持,AOP支持,Enjoy 模板引擎 二、...

NLP底层技术之句法分析_Vico_Men的博客-程序员秘密

句法分析是自然语言处理(natural language processing, NLP)中的关键底层技术之一,其基本任务是确定句子的句法结构或者句子中词汇之间的依存关系。   句法分析分为句法结构分析(syntactic structure parsing)和依存关系分析(dependency parsing)。以获取整个句子的句法结构或者完全短语结构为目的的句法分析,被称为成分结构分析(co

如何在对话框中加入TOOLBAR?_对话框上添加toolbar_c0ffee1982的博客-程序员秘密

如何在对话框中加入TOOLBAR?楼主crystal2000(Sun)2002-01-25 09:48:58 在 VC/MFC / 基础类 提问如何在对话框中加入TOOLBAR? 问题点数:20、回复次数:3Top 1 楼crystal2000(Sun)回复于 2002-01-25 10:01:08 得分 0 请教!     Top2 楼guzh()回复于 2002-01-

英文聊天常用缩写单词_Linux????? Mr.Liyz的博客-程序员秘密

hiho=hola=yo=hi=hey=hellow=你好,大家好wuz up=sup=what's up=(原意:怎么样你?/有什么事儿嘛?)也可作为问好用(熟人之间候)回答时有事说事,没事用"nothing/nothin much/not much/nm等。再见cya=cu=see ya=see you=再见laterz=later=cya l...

前端基础:WebAPIs(一)_前端做webapi_illion-78的博客-程序员秘密

day01 - Web APIs学习目标:能够通过ID来获取元素能够通过标签名来获取元素能够通过class来获取元素能够通过选择器来获取元素能够获取body和html元素能够给元素注册事件能够修改元素的内容能够区分innerText和innerHTML的区别能够修改像div这类普通元素的属性能够修改表单元素的属性能够修改元素的样式属性1.1. Web API介绍1....

推荐文章

热门文章

相关标签