@@ -107,6 +107,11 @@ public class ArcSeekBar extends View {
107
107
*/
108
108
private float mBlockAngle = 1 ;
109
109
110
+ /**
111
+ * 刻度偏移的角度大小
112
+ */
113
+ private float mTickOffsetAngle = 0 ;
114
+
110
115
/**
111
116
* 总刻度数
112
117
*/
@@ -320,6 +325,8 @@ private void init(Context context,AttributeSet attrs){
320
325
mTickSplitAngle = a .getInt (attr ,5 );
321
326
}else if (attr == R .styleable .ArcSeekBar_arcBlockAngle ){
322
327
mBlockAngle = a .getInt (attr ,1 );
328
+ }else if (attr == R .styleable .ArcSeekBar_arcTickOffsetAngle ){
329
+ mTickOffsetAngle = a .getInt (attr ,0 );
323
330
}else if (attr == R .styleable .ArcSeekBar_arcThumbStrokeWidth ){
324
331
mThumbStrokeWidth = a .getDimension (attr ,mThumbStrokeWidth );
325
332
}else if (attr == R .styleable .ArcSeekBar_arcThumbColor ){
@@ -464,14 +471,14 @@ private void drawArc(Canvas canvas){
464
471
mPaint .setColor (mProgressColor );
465
472
}
466
473
//绘制刻度
467
- canvas .drawArc (rectF , i * (mBlockAngle + mTickSplitAngle ) + mStartAngle , mBlockAngle , false , mPaint );
474
+ canvas .drawArc (rectF , i * (mBlockAngle + mTickSplitAngle ) + mStartAngle + mTickOffsetAngle , mBlockAngle , false , mPaint );
468
475
} else {
469
476
if (mNormalColor != 0 ){
470
477
//未选中的刻度
471
478
mPaint .setShader (null );
472
479
mPaint .setColor (mNormalColor );
473
480
//绘制刻度
474
- canvas .drawArc (rectF , i * (mBlockAngle + mTickSplitAngle ) + mStartAngle , mBlockAngle , false , mPaint );
481
+ canvas .drawArc (rectF , i * (mBlockAngle + mTickSplitAngle ) + mStartAngle + mTickOffsetAngle , mBlockAngle , false , mPaint );
475
482
}
476
483
}
477
484
}
@@ -545,9 +552,9 @@ private void drawText(Canvas canvas){
545
552
mTextPaint .setTextAlign (Paint .Align .CENTER );
546
553
547
554
Paint .FontMetrics fontMetrics = mTextPaint .getFontMetrics ();
548
- // 计算文字高度
555
+ // 计算文字高度
549
556
float fontHeight = fontMetrics .bottom - fontMetrics .top ;
550
- // 计算文字baseline
557
+ // 计算文字baseline
551
558
float textBaseX = getWidth () / 2 + mLabelPaddingLeft - mLabelPaddingRight ;
552
559
float textBaseY = getHeight () - (getHeight () - fontHeight ) / 2 - fontMetrics .bottom + mLabelPaddingTop - mLabelPaddingBottom ;
553
560
if (isShowPercentText ){//是否显示百分比
@@ -906,7 +913,6 @@ public float getThumbCenterY() {
906
913
return mThumbCenterY ;
907
914
}
908
915
909
-
910
916
public float getAllowableOffsets () {
911
917
return mAllowableOffsets ;
912
918
}
@@ -915,6 +921,53 @@ public boolean isEnabledDrag() {
915
921
return isEnabledDrag ;
916
922
}
917
923
924
+ public boolean isEnabledSingle () {
925
+ return isEnabledSingle ;
926
+ }
927
+
928
+ public boolean isShowPercentText () {
929
+ return isShowPercentText ;
930
+ }
931
+
932
+ public boolean isShowTick () {
933
+ return isShowTick ;
934
+ }
935
+
936
+ public boolean isShowThumb () {
937
+ return isShowThumb ;
938
+ }
939
+
940
+
941
+ public float getThumbRadiusEnlarges () {
942
+ return mThumbRadiusEnlarges ;
943
+ }
944
+
945
+ /**
946
+ * 触摸时按钮半径放大量
947
+ * @param thumbRadiusEnlarges
948
+ */
949
+ public void setThumbRadiusEnlarges (float thumbRadiusEnlarges ) {
950
+ this .mThumbRadiusEnlarges = thumbRadiusEnlarges ;
951
+ }
952
+
953
+ /**
954
+ * 是否默认显示百分比为标签文字
955
+ * @param showPercentText
956
+ */
957
+ public void setShowPercentText (boolean showPercentText ) {
958
+ isShowPercentText = showPercentText ;
959
+ invalidate ();
960
+ }
961
+
962
+ /**
963
+ * 是否显示拖动按钮
964
+ * @param showThumb
965
+ */
966
+ public void setShowThumb (boolean showThumb ) {
967
+ isShowThumb = showThumb ;
968
+ invalidate ();
969
+ }
970
+
918
971
/**
919
972
* 触摸时可偏移距离:偏移量越大,触摸精度越小
920
973
* @param allowableOffsets
@@ -925,12 +978,21 @@ public void setAllowableOffsets(float allowableOffsets) {
925
978
926
979
/**
927
980
* 是否启用拖拽
928
- * @param enabledDrag 默认为true,为false时 相当于{@link android.widget.ProgressBar}
981
+ * @param enabledDrag 默认为 true,为 false 时 相当于{@link android.widget.ProgressBar}
929
982
*/
930
983
public void setEnabledDrag (boolean enabledDrag ) {
931
984
isEnabledDrag = enabledDrag ;
932
985
}
933
986
987
+
988
+ /**
989
+ * 设置是否启用点击改变进度
990
+ * @param enabledSingle
991
+ */
992
+ public void setEnabledSingle (boolean enabledSingle ){
993
+ isEnabledSingle = enabledSingle ;
994
+ }
995
+
934
996
/**
935
997
* 设置中间文本标签内间距
936
998
* @param left
@@ -1032,9 +1094,27 @@ public void setOnChangeListener(OnChangeListener onChangeListener){
1032
1094
1033
1095
1034
1096
public interface OnChangeListener {
1097
+ /**
1098
+ * 跟踪触摸事件开始时回调此方法 {@link MotionEvent#ACTION_DOWN}
1099
+ * @param isCanDrag
1100
+ */
1035
1101
void onStartTrackingTouch (boolean isCanDrag );
1102
+
1103
+ /**
1104
+ * 进度改变时回调此方法
1105
+ * @param progress
1106
+ * @param max
1107
+ * @param fromUser
1108
+ */
1036
1109
void onProgressChanged (float progress , float max , boolean fromUser );
1110
+ /**
1111
+ * 跟踪触摸事件停止时回调此方法 {@link MotionEvent#ACTION_UP}
1112
+ */
1037
1113
void onStopTrackingTouch (boolean isCanDrag );
1114
+
1115
+ /**
1116
+ * 通过点击事件改变进度后回调此方法 {@link GestureDetector#GestureDetector#onSingleTapUp()}
1117
+ */
1038
1118
void onSingleTapUp ();
1039
1119
}
1040
1120
0 commit comments