由于我们要使用的是三个参数的构造器,所以对应一参二参的构造器进行如下设置:
/**游标图片的真实高度 之后通过缩放比例可以把图片设置成想要的大小*/ /**重新获取游标图片的宽高*/ /**初始化两个游标的位置*/
slideLowX和
通过Matrix对bitmap进行缩放,将游标设置成我们想要的大小。初始化两个游标在双向选择器的两头,一般都是在最大值和最小值处的,若有特殊需求也可更改slideBigX
进行设置。由于我们在计算自定义view的高度时,需要把刻度以及刻度上边文字的高度算进去,所以有刻度时 paddingTop 要加上(text高度)和(刻度线高度加刻度线上边文字的高度和) 之间的最大值,没有刻度时 paddingTop 加上 text的高度。
bitmapHeight + 10(+10只是为了能让view所占的空间大一些而已,没有特殊意义,可以不加)。
计算View的宽度:
与计算高度同理,但此时,我们需要确定线(进度条)的长度,起始点。
linePaint.setStrokeCap(Paint.Cap.ROUND)
可以画出带圆角的线。之后要画两条线,一条是从线的起点到左边游标的中心。另一条是从右边游标的中心到线的终点。
画游标:
字的位置控制在游标的正上方。有其他需求可以在此处调整。
画刻度线:
我们已经传过来equal的值,即把所有数据分成equal份,每一份画一个刻度。并在刻度上方写上数字。如果有特殊需求,比如有的刻度线长有的刻度线短,则需要加个判断,根据判断的结果drawLine
,不同的结果设置不同的高度。
2即当前点击位置X的坐标在游标的左右顶点之间,此时满足当前点击到了左边游标的条件。我们此时才可以判定当前点击位置点在了左边游标上。右边游标的判定同理。完整的监听代码请在文末上传的项目中查看。
滑动状态监听:
通过此方法获取左右游标上的数值,然后通过我们自己定义的接口进行值的传递。
computRange();
这个方法在我看来就是个数学题了。通过当前长度占总长度的比例,再乘以数据的总数,加上起点的数据(数据的最小值),就是我们当前的数据了。
这里面包含了我们自定义属性的使用,又不懂得地方请看上方表格。
- 代码中用法
用法很简单,我们可以通过我们定义的接口获取当前范围。
此项目使用自定义view的知识比较多,大家若想巩固自己的自定义view的知识可以拿这个项目来练练手,而且由于时间问题,此项目可优化的地方还很多,比如再加一个属性控制游标上边的文字在游标上部,中部,下部。滑动监听判断tanα<1才判断是游标在滑动,控制不同长度的刻度线等。这些大家都可以根据自己的需求自由定制,我所实现的功能也只是符合大多数情况而已。
github项目地址:
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。