仿京东金融选择金钱刻度尺效果


本篇是 陈秀相 的第二篇投稿,篇幅不长,实现了一个刻度尺的自定义View,属于小技巧类的文章,很适合在周五的时候阅读。


最后祝大家周末愉快!


陈秀相 的博客地址:

http://blog.csdn.net/u012305710



前段时间用了京东金融的APP其中有一个选择金钱的效果感觉很炫就决定模仿下,下面是两张对比照。






这篇文章能够学到的知识点主要包含了:


  1. Canvas 画布的使用;


  2. 触摸事件的处理;


  3. Scroller 惯性滑动的处理;


  4. 一些数学的加减运算 。


一些初始化画笔的操作就不再这里赘述了,下面直接讲自定义View几个方法。按照顺序来:


onMeasure方法 中主要是 测量View的大小,这里我们给刻度尺在 wrap_content 的时候设置一个默认的高度。




onDraw方法 这是我们一个主要的方法在里面 进行View的绘制,看效果图我们分为几个步骤:


  1. 画底部横线

  2. 画刻度

  3. 画值 


画底部横线很简单就是画一条线:


canvas.drawLine(0, mStartY, getWidth(), mStartY, mLinePaint);


画刻度(10个格子为一个高点) 和 画当前刻度值 代码如下:




其实这段是项目中最重要的一部分,下面来解释下 13代表每隔13个像素画一个刻度20000代表刻度的最大值,其他解释之前要看下触摸事件怎么处理的。




下面解释下:


  • (-lastMoveX + start):比方说当前屏幕左侧刻度为10,就是向左滑动了130个像素,看触摸事件知道 lastMoveX -130,这样 -lastMoveX+stat=130+10*13=260 像素所以屏幕左侧刻度应该为20,这就正好符合。


其实到这里项目已经可以运行了,但是滑动一下就卡住了,这时候体验就特别不好,这时候就使用 Scoller的fling函数 实现 View的甩动。


首先需要计算 1秒内运动了多少个像素


velocityTracker.computeCurrentVelocity(1000);


下面调用 fling函数




<800 是在运行中发现如果不加这个判断有的时候稍微滑动一下View就跑了,所以为了体验更好加入的。-Math.abs(xVelocity) + 0.5) 是因为左右滑动的 xVelocity 值不一样,为了方便处理改成统一的,方便在下面的方法中计算,可以打印下看下实际的值,这时候还要调用 computeScroll 配合使用并在里面进行一些计算。




到此整个项目就结束了,总结下主要是 一些计算 和 Scoller的使用 在看的时候不懂得地方可以打印日志比较下应该就明白了。 
最后附上一些函数的解释:




点击最后 阅读原文 可以下载源码。






如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。


欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值