当前位置:网站首页>自定义圆形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);
}
}
边栏推荐
猜你喜欢
随机推荐
MySQL知识总结 (九) 用户与用户权限管理
spark(standalone,yarn)
函数递归和动态内存初识
Flink实现Exactly Once
ConstraintLayout from entry to abandonment
C语言待解决
MySQL知识总结 (六) MySQL调优
MongoDB Compass 安装与使用
宝塔搭建PHP自适应懒人网址导航源码实测
NDK报错问题分析方案(一)
AAPT: error: duplicate value for resource ‘attr/xxx‘ with config ‘‘, file failed to compile.
LLVM系列第二十三章:写一个简单的运行时函数调用统计器(Pass)
我的第一篇博客
spark中RDD与DF的关系
Kubernetes架构和组件
Hession使用
详解RecyclerView系列文章目录
redis基础
C语言初级—用一角,两角,五角和一元组成3.5元有多少种组合方法
C语言日记 3 常量