当前位置:网站首页>自定义圆形seekBar,超简单
自定义圆形seekBar,超简单
2022-08-02 14:07:00 【昵称审核中】
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
/**
* 自定义圆形seekBar,只支持固定宽度
*/
public class CircularSeekBar extends View {
private int mViewWidth;//控件的宽
private int mCurrentProgress = 40;//当前进度
private int mMaxProgress = 100;//总进度
private int mSeekBarCircularWidth = 6;//圆环的宽度
private int mR;//半径
private String mBgDefault = "#BDBDBD";//默认背景色
private String mBgSeekBar = "#1db36f";//进度背景色
private Paint mPaintDefault;
private Paint mPaintSeekBar;
private RectF rectFProgress;
public CircularSeekBar(Context context) {
super(context);
init();
}
private void init() {
mPaintDefault = new Paint();
mPaintDefault.setStrokeWidth(mSeekBarCircularWidth);
mPaintDefault.setAntiAlias(true);
mPaintDefault.setColor(Color.parseColor(mBgDefault));
mPaintDefault.setStyle(Paint.Style.STROKE);
mPaintSeekBar = new Paint();
mPaintSeekBar.setStrokeWidth(mSeekBarCircularWidth);
mPaintSeekBar.setAntiAlias(true);
mPaintSeekBar.setColor(Color.parseColor(mBgSeekBar));
mPaintSeekBar.setStyle(Paint.Style.STROKE);
rectFProgress = new RectF();//只初始化一次
}
public CircularSeekBar(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public CircularSeekBar(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@Override
protected void onDraw(Canvas canvas) {
int cx = mViewWidth / 2;
canvas.drawCircle(cx, cx, mR, mPaintDefault);
int sweepAngle = mCurrentProgress * 360 / mMaxProgress;
int left = mSeekBarCircularWidth / 2;
int right = mViewWidth - left;
rectFProgress.set(left, left, right, right);//减掉画笔的宽度
canvas.drawArc(rectFProgress, -90, sweepAngle, false, mPaintSeekBar);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
mViewWidth = MeasureSpec.getSize(widthMeasureSpec);
mR = (mViewWidth - mSeekBarCircularWidth) / 2;
setMeasuredDimension(mViewWidth, mViewWidth);
}
}
边栏推荐
猜你喜欢
随机推荐
线性代数期末复习存档
6.如何使用CardView制作卡片布局效果
【c】小游戏---扫雷雏形
C语言日记 7 输入/输出格式控制
主存储器(二)
使用flutter小记
Tornado framework routing system introduction and (IOloop.current().start()) start source code analysis
加强版Apktool堪称逆向神器
MySQL知识总结 (五) 锁
flutter中App签名
Introduction and use of Haystack
redis基础
绕过正则实现SQL注入
UIWindow的makeKeyAndVisible不调用rootviewController 的viewDidLoad的问题
Redis database related commands
It is not allowed to subscribe with a(n) xxx multiple times.Please create a fresh instance of xxx
数据乱码问题—更改mysql字符编码
Scala学习总结
C语言日记 5 运算符和表达式
Eslint规则大全