android身高控件_Android 滑动选择身高体重控件——RulerView

本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发

前言

隔一段时间工作不忙的时候就想温习一下view相关的知识,比起学习其他东西,感觉做控件不会显的枯燥,日复一日做着重复的工作,维护着项目,总想在里面添加一些新的东西,比如新的界面开始用kotlin,用的第三方不是很满意的控件,想想不是很难就自己来做,闲来无聊就看看python入门,最近项目多了一个需要滑动选择身高和运动时间的控件,在github上没找到合适的,正好抛物线大神发起了一个自定义view的仿写活动,一举两得,就有了该控件。

封面图

封面.png

效果图

RulerViewGif.gif

2017/11/29 新添功能

gif2

使用computeScrollTo(float)

2017/12/22 新添功能

image.png

增加了scaleLimit属性用来设置相邻2个刻度之间的数量属性

支持设置的属性

使用

compile 'com.github.superSp:RulerView:v1.5'

实现思路

初始化画笔,以及其他需要的参数

重写onMeasuer()确定尺子的大小

重写onDraw()绘画出静态尺子,并且将一些滑动时需要改变的参数设置为变量,绘制时只绘制当前屏幕可见区域,滑动尺子时,只刷新当前屏幕模拟滑动并不是真正的滑动

重写onTouchEvent()处理滑动,增加滑动速率监听VelocityTracker以及惯性滑动以及抬起手指时指针落在刻度上面需要的属性动画ValueAnimator

实现过程

测量

控件的高度=尺子的高度+结果值的高度+尺子距离结果值的高度

控件的宽度=屏幕宽度或者固定宽度

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

int heightModule = MeasureSpec.getMode(heightMeasureSpec);

int heightSize = MeasureSpec.getSize(heightMeasureSpec);

int widthSize = MeasureSpec.getSize(widthMeasureSpec);

switch (heightModule) {

case MeasureSpec.AT_MOST:

height = rulerHeight + (showScaleResult ? resultNumRect.height() : 0) + rulerToResultgap * 2 + getPaddingTop() + getPaddingBottom();

break;

case MeasureSpec.UNSPECIFIED:

case MeasureSpec.EXACTLY:

height = heightSize + getPaddingTop() + getPaddingBottom();

break;

}

width = widthSize + getPaddingLeft() + getPaddingRight();

setMeasuredDimension(width, height

你可能感兴趣的:(android身高控件)