当前位置:网站首页>自定义圆形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);
}
}
边栏推荐
猜你喜欢
随机推荐
Redis-01-Nosql概述
uni-app页面、组件视图数据无法刷新问题的解决办法
DataX 的使用
PostgreSQL 性能谜题
无人驾驶综述:国外国内发展历程
AAPT: error: duplicate value for resource ‘attr/xxx‘ with config ‘‘, file failed to compile.
getUserProfile接口不显示用户性别和地区
VS Code无法安装插件之Unable to install because, the extension '' compatible with current version
flutter中App签名
Spark_DSL
MySQL知识总结 (一) 数据类型
Flink-独立集群/Yarn
Tornado framework routing system introduction and (IOloop.current().start()) start source code analysis
binlog与iptables防nmap扫描
无人驾驶综述:摘要
华为防火墙
【c】小游戏---五子棋之井字棋雏形
初识c语言指针
2022最新交规记忆重点
关于spark









