当前位置:网站首页>自定义圆形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入门-1-redis概念和基础
C语言sizeof和strlen的区别
flutter中App签名
C语言日记 5 运算符和表达式
加强版Apktool堪称逆向神器
两个surfaceview的重叠效果类似直播效果中的视频和讲义实践
再见篇:App专项技术优化
华为路由交换
C语言——断言assert的使用
Flink依赖汇总
uni-app页面、组件视图数据无法刷新问题的解决办法
数据的表示方法和转换(二进制、八进制、十进制、十六进制)
MySQL知识总结 (四) 事务
C语言一维数组练习——将一个字符串中的某个字符替换成其它字符
Flink-独立集群/Yarn
LLVM系列第十九章:写一个简单的Module Pass
Flink前期代码结构
Scala学习总结
Win10不能启动WampServer图标呈橘黄色的解决方法
标签加id 和 加号 两个文本框 和一个var 赋值