Home

Awesome

RuleView

Download

一系列卷尺控件,包含:基本卷尺控件(体重尺,或其它)、金额卷尺控件、时间卷尺控件

demo中,分别用三个控件,高仿了薄荷健康的体重尺、团贷网的金额尺、海康威视下萤石云视频的时间尺

一、效果图

全部效果:

allGif

RuleView:

ruleGif

MoneySelectRuleView:

moneyGif

TimeRuleView:

timeGif

二、卷尺功能说明

1. RuleView

基本卷尺控件,主要功能:

demo中以体重尺为例,但不限于此

2. MoneySelectRuleView

金额选择尺,除了基本卷尺的功能外,额外的功能有:

3. TimeRuleView

时间尺,一天24h内的时间尺,最小刻度是1s

三、依赖

build.gradle in app, the repertory is JCenter:

implementation 'com.zjun:rule-view:0.0.1'

四、使用

4.1 布局

都是最简单的使用,根据需要使用自定义属性即可,详细的自定义属性见五

<com.zjun.widget.RuleView
   android:layout_width="match_parent"
   android:layout_height="70dp"
   app:zjun_textSize="18sp" />
 
<com.zjun.widget.MoneySelectRuleView
   android:layout_width="match_parent"
   android:layout_height="wrap_content" />
 
<com.zjun.widget.TimeRuleView
   android:layout_width="match_parent"
   android:layout_height="wrap_content" />

4.2 监听回调

主要用来监听当前数值的变化

ruleView.setOnValueChangedListener(new RuleView.OnValueChangedListener() {
   @Override
   public void onValueChanged(float value) {
       tvValue.setText(Float.toString(value));
   }
});
 
// 金额的超额判断,不在自定义View中判断,使用时自行判断,可参考demo
moneySelectRuleView.setOnValueChangedListener(new MoneySelectRuleView.OnValueChangedListener() {
   @Override
   public void onValueChanged(int newValue) {
       tvMoney.setText(Integer.toString(newValue));
   }
});
 
timeRuleView.setOnTimeChangedListener(new TimeRuleView.OnTimeChangedListener() {
   @Override
   public void onTimeChanged(int newTimeValue) {
       tvTime.setText(TimeRuleView.formatTimeHHmmss(newTimeValue));
   }
});

五、属性说明

5.1 RuleView属性

属性名说明默认值
zjun_bgColor背景颜色#f5f8f5
zjun_gradationColor刻度颜色Color.LTGRAY(#CCCCCC)
gv_shortLineWidth短刻度线的宽度1dp
gv_shortGradationLen短刻度长度16dp
gv_longGradationLen长刻度长度gv_shortGradationLen * 2
gv_longLineWidth长刻度线的宽度gv_shortLineWidth * 2
zjun_textColor刻度值字体颜色Color.BLACK,#000000
zjun_textSize刻度值字体大小14sp
zjun_indicatorLineColor中间指针线的颜色#48b975
zjun_indicatorLineWidth中间指针线的宽度3dp
gv_indicatorLineLen中间指针线的长度35dp
gv_minValue最小值0f
gv_maxValue最大值100f
gv_currentValue当前值50f
gv_gradationUnit刻度间最小单位数值.1f
gv_numberPerCount两数值间最小单位的个数10
gv_gradationGap最小单位的间距10dp
gv_gradationNumberGap数值与最长刻度的间距8dp

5.2 MoneySelectRuleView属性

属性名说明默认值
zjun_bgColor背景色#F5F5F5
zjun_gradationColor刻度颜色Color.LTGRAY(#CCCCCC)
msrv_gradationHeight刻度的总高度,刻度基线以上的高度40dp
msrv_gradationShortLen短刻度的长度6dp
msrv_gradationLongLen长刻度的长度msrv_gradationShortLen * 2
msrv_gradationShortWidth短刻度的宽度1px
msrv_gradationLongWidth短刻度的长度msrv_gradationShortWidth
msrv_gradationValueGap刻度数值与长刻度的间距8dp
msrv_gradationTextSize刻度数值文字的大小12sp
zjun_textColor刻度数值文字的颜色Color.GRAY
zjun_indicatorLineColor中间指针线的颜色#eb4c1c
msrv_balanceTextSize余额文字的大小10sp
msrv_unitGap最小单位的间距6dp
msrv_balanceText余额文字内容"剩余额度"
msrv_balanceGap余额文字与刻度基线的间距4dp
msrv_maxValue最大金额50_000
msrv_currentValue当前金额0
msrv_balanceValue剩余金额0
msrv_valueUnit每隔最小单位代表的金额值100
msrv_valuePerCount刻度数值间的最小单位数10

5.3 TimeRuleView属性

属性名说明默认值
zjun_bgColor背景颜色#EEEEEE
zjun_gradationColor刻度颜色Color.GRAY
trv_partHeight时间段的高度20dp
trv_partColor时间的颜色#F58D24
trv_gradationWidth刻度的宽度1px
trv_secondLen秒刻度的长度3dp
trv_minuteLen分刻度的长度5dp
trv_hourLen时刻度的长度10dp
trv_gradationTextColor刻度数值颜色Color.GRAY
trv_gradationTextSize刻度数值字体大小12sp
trv_gradationTextGap刻度数值与时刻度的间距2dp
trv_currentTime当前时间0(单位:秒,范围∈[0, 24*3600])
trv_indicatorTriangleSideLen中间指针头部三角形的边长15dp
zjun_indicatorLineWidth中间指针的宽度1dp
zjun_indicatorLineColor中间指针的颜色Color.RED

六、参考

[1] 带你实现漂亮的滑动卷尺

[2] 安卓自定义View进阶-缩放手势检测(ScaleGestureDecetor)

[3] 安卓自定义View进阶-MotionEvent详解

[4] 手把手教你发布自己的开源库到 Jcenter

[5] RecyclerView 的 onTouchEvent(MotionEvent e) 源码

说明:

RuleView,针对参考[1]中 TapeView 的源码,进行了一些优化:

1) 左侧起始绘制刻度:如果当前绘制的刻度 currentCalibration 为0,即第一个刻度,则不绘制。滑动过程中,会发现最左侧的刻度,有时会突然消失。如果此刻度是带数值的长刻度,那数值也不会显示,界面突变会更明显。把控件宽度为 gapWidth 的整数倍,能立马看到这突变效果

优化:左侧起始刻度,往左多绘制2个刻度单位

2) 右侧结束绘制刻度:一直绘制到当前控件的10倍宽,或最大刻度数(totalCalibration = 最大刻度数 + 1,看的时候掉坑了,觉得最大刻度绘制不出来,原来是加了1)

优化:在最大刻度内,右侧结束刻度,与左侧起始刻度一样,多绘制2个刻度单位即可

多绘制的刻度单位个数,完全可以根据数值的最大宽度来决定。多了2个刻度单位,因为数值与刻度对称,就有了4个刻度。具体根据项目,多退少补

七、更新

2018/8/22

经过网友提醒,才发现单词 Rule 写错了,尴尬了⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄。现更改 GitHub 项目名为 RulerView,其它不便修改,保持不变。

八、LICENSE

Copyright (c) 2018 Ralap

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.