version:6.1

fix:
update:增加控制窗口
This commit is contained in:
2022-11-14 17:47:58 +08:00
parent aa3ceda9f1
commit d6b6b5cec5
22 changed files with 2250 additions and 9 deletions

View File

@@ -0,0 +1,185 @@
package com.uiui.aios.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.os.Build;
import android.util.AttributeSet;
import android.util.Log;
public class RulerSeekBar extends androidx.appcompat.widget.AppCompatSeekBar {
/**
* 刻度线画笔
*/
private Paint mRulerPaint;
/**
* 刻度线的个数,等分数等于刻度线的个数加1
*/
private int mRulerCount = 1;
/**
* 每条刻度线的宽度
*/
private int mRulerWidth = 2;
/**
* 刻度线的颜色
*/
private int mRulerColor = Color.GRAY;
/**
* 滑块上面是否要显示刻度线
*/
private boolean isShowTopOfThumb = true;
private int radius = 12;
public RulerSeekBar(Context context) {
super(context);
init();
}
public RulerSeekBar(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public RulerSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
/**
* 初始化
*/
private void init() {
//创建绘制刻度线的画笔
mRulerPaint = new Paint();
mRulerPaint.setColor(Color.parseColor("#d0cccc"));
mRulerPaint.setAntiAlias(true);
//Api21及以上调用去掉滑块后面的背景
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setSplitTrack(false);
}
}
/**
* 重写onDraw方法绘制刻度线
*
* @param canvas
*/
@Override
protected synchronized void onDraw(Canvas canvas) {
super.onDraw(canvas);
//极限条件校验
if (getWidth() <= 0 || mRulerCount <= 0) {
return;
}
int thumbRadius = 0;
if (getThumb() != null) {
Rect rect = getThumb().getBounds();
thumbRadius = (rect.right - rect.left) / 2;
}
Log.e("RulerSeekBar", "onDraw: thumbRadius = " + thumbRadius);
//获取每一份的长度
int length = (getWidth() - getPaddingLeft() - getPaddingRight() - (mRulerCount + 1) * (radius) - thumbRadius * 2) / (mRulerCount + 1);
Log.e("RulerSeekBar", "onDraw: mRulerCount = " + mRulerCount);
Log.e("RulerSeekBar", "onDraw: getWidth = " + getWidth());
Log.e("RulerSeekBar", "onDraw: getPaddingLeft = " + getPaddingLeft());
Log.e("RulerSeekBar", "onDraw: getPaddingRight = " + getPaddingRight());
Log.e("RulerSeekBar", "onDraw: length = " + length);
//计算刻度线的顶部坐标和底部坐标
Log.e("RulerSeekBar", "onDraw: getHeight = " + getHeight());
Log.e("RulerSeekBar", "onDraw: getMinimumHeight = " + getMinimumHeight());
int rulerTop = getHeight() / 2 - getMinimumHeight() / 2;
int rulerBottom = rulerTop + getMinimumHeight();
Log.e("RulerSeekBar", "onDraw: rulerTop = " + rulerTop);
Log.e("RulerSeekBar", "onDraw: rulerBottom = " + rulerBottom);
int center = getHeight() / 2;
//获取滑块的位置信息
Rect thumbRect = null;
if (getThumb() != null) {
thumbRect = getThumb().getBounds();
}
Log.e("RulerSeekBar", "onDraw: thumbRect = " + thumbRect);
//绘制刻度线
for (int i = 0; i <= mRulerCount + 1; i++) {
//计算刻度线的左边坐标和右边坐标
int rulerLeft = i * length + getPaddingLeft();
Log.e("RulerSeekBar", "onDraw: rulerLeft = " + rulerLeft);
int rulerRight = rulerLeft + mRulerWidth;
//判断是否需要绘制刻度线
if (!isShowTopOfThumb && thumbRect != null && rulerLeft - getPaddingLeft() > thumbRect.left && rulerRight - getPaddingLeft() < thumbRect.right) {
continue;
}
if (rulerLeft > thumbRect.left && rulerLeft < thumbRect.right) {
continue;
}
//进行绘制
// canvas.drawRect(rulerLeft, rulerTop, rulerRight, rulerBottom, mRulerPaint);
canvas.drawCircle(rulerLeft + radius + thumbRadius, center, radius, mRulerPaint);
}
}
/**
* 设置刻度线的个数
*
* @param mRulerCount
*/
public void setRulerCount(int mRulerCount) {
this.mRulerCount = mRulerCount;
requestLayout();
}
/**
* 设置刻度线的宽度,单位(px)
*
* @param mRulerWidth
*/
public void setRulerWidth(int mRulerWidth) {
this.mRulerWidth = mRulerWidth;
requestLayout();
}
/**
* 设置刻度线的颜色
*
* @param mRulerColor
*/
public void setRulerColor(int mRulerColor) {
this.mRulerColor = mRulerColor;
if (mRulerPaint != null) {
mRulerPaint.setColor(mRulerColor);
requestLayout();
}
}
/**
* 滑块上面是否需要显示刻度线
*
* @param isShowTopOfThumb
*/
public void setShowTopOfThumb(boolean isShowTopOfThumb) {
this.isShowTopOfThumb = isShowTopOfThumb;
requestLayout();
}
}