timeline一个简单精美的自定义时间轴
来源:互联网 发布:金迪汽修软件使用说明 编辑:程序博客网 时间:2024/05/21 20:22
转载自:http://blog.csdn.net/u012534831/article/details/76512649
H-Express Library——–timeline
这是母项目 H-Express 中的那个自定义时间轴view,现抽取出来分享给大家,这个自定义view比较简单,作为学习自定义view入门的朋友可不能错过了。
一般可以应用在单号追踪、历史事件记录、任务完成度显示等方面,作为Recyclerview或者listview的item布局即可。
先上图:
左边为H-Express中的效果,右边为原始效果,横向和竖向。
import
AS:
- 1
- 2
- 3
EC:
使用eclipse的同学直接到项目的github地址下面timelinelibrary中拷贝出两个类,一个attrs出来,放到自己项目中即可。
使用
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
看完了怎么用下来就该看看源码实现了
timeline的实现很简单,我这里以竖向为例,横向的类似。总结为2点:
- 首先以整个view的正中心然后靠左边界为基准绘制中间的圆,如图。为什么要靠左边呢,因为放在左边界再加上合适的paddingLeft就很容易能控制圆的位置了(同理,横向的靠上边,使用paddingTop控制圆的位置)。
然后以这个圆为基准,再绘制上面的线条和下面的线条。
下面是6个属性,以供xml中进行设置。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
很简单的 onMeasure() 方法,如果你的自定义 view 没有什么特殊需求,直接把这个拿去用,通用版。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
因为我们使用的元素为3个 drawable,是现成的 view,所以已经不需要在 ondraw()方法中进行绘制了,而更多的是调整每个 drawable 的位置,所以下面的方法写在 onSizeChanged() 中更合适。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
主要看一下 initDrawableSize() 方法:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
先了解一下 setBounds() 方法:
这句话的意思是:为Drawable 指定一个矩形区域,在onDraw() 方法被调用时使用。
这个矩形区域参数要求:矩形左边距view左边界的距离,矩形上边距view上边界的距离,矩形右边距view左边界的距离,矩形下边距view上边界的距离。
首先设置 mMarkerDrawable 的 bounds,左边的距离为pleft,上下为中心位置,确定了这个 bounds 为基准位置之后,再去绘制上下线条。
如果 mMarkerDrawable 为空,即在 xml 中不要这个圆,那么我们此处是将它看做一个点,一个左边的距离为pleft,上下为中心位置的点,作为我们的基准点,然后再去绘制上下线条,最终绘制出来的即为一条线段。
对于上下线的绘制很简单,这里以上线条为例,线条上端紧挨view的顶端,下端紧挨这个bounds的顶部,线条的长度为 bounds 的顶端距离上边界的距离。线条长度和 bounds 挂上钩之后,我们如果在 xml 中设置 paddingTop ,则 bounds.top 变大,线条长度变长,圆相应的往下移动。bounds.top= pTop +(height/2-mMarkerSize/2)。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
源码github地址:
https://github.com/qht1003077897/timeline
- timeline,一个简单精美的自定义时间轴
- timeline一个简单精美的自定义时间轴
- 自定义一个简单精美的时间轴控件
- Android时间轴(Timeline)效果的实现
- Android TimeLine 时间节点轴的实现
- Timeline可展开的时间轴ExpandableListView
- Timeline时间轴
- Android开发时间轴 TimeLine
- 使用JavaFX时间轴(Timeline)编写的等待动画
- 针对时间轴TimeLine的一些js操作
- Android时间轴(Timeline)效果的实现(使用RecyclerView)
- 自定义控件-精美的心电图
- jQuery制作Facebook Timeline(时间轴)
- Android自定义简单时间轴的实现
- Day 23:使用 TimelineJS 构建精美的时间轴
- echarts通过timeline时间轴改变图表的数据,解决X轴,series问题
- 一个简单的时间轴实现
- 【时间轴】推荐几款jQuery时间轴插件Timeline
- Android 系统永不休眠
- 浏览器调用windows系统exe文件方法可以用于启动屏幕键盘等功能哦
- 深入理解 index merge
- python爬虫代理IP池(proxy pool)
- 书,不珍藏了。
- timeline一个简单精美的自定义时间轴
- 【Others】从GitHub上下载单个目录或者文件
- Akka(25): Stream:对接外部系统-Integration
- leetcode 199. Binary Tree Right Side View
- markdown编辑器
- JS数组扁平化、去重、排序
- activeMQ指南针_消息存储机制_Kaha存储机制原理分析
- linux内核代码特点
- 全文索引维护