当前位置:网站首页>自定义圆形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);
}
}
边栏推荐
猜你喜欢
随机推荐
ThinkPHP5.0内置分页函数Paginate无法获取POST页数问题的解决办法
MapReduce流程
C语言初级—水仙花数
什么是闭包?闭包的作用?闭包的应用?有什么缺点?
宝塔搭建PHP自适应懒人网址导航源码实测
static关键字3种作用,简单粗暴对比,好理解
MongoDB Compass 安装与使用
YOLOv7 uses cloud GPU to train its own dataset
Kubernetes架构和组件
St. Regis Takeaway Notes - Lecture 05 Getting Started with Redis
统计偏科最严重的前100名学生
加减法运算及其溢出处理
科创知识年度盛会,中国科创者大会8月6日首场开幕!
LLVM系列第十九章:写一个简单的Module Pass
MySQL知识总结 (二) 存储引擎
Ffmpeg交叉编译
【c】小游戏---扫雷雏形
无人驾驶综述:摘要
函数递归和动态内存初识
flutter中App签名