Android自定义View实现圆环进度条
时间:2022-07-26
本文章向大家介绍Android自定义View实现圆环进度条,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例为大家分享了Android自定义View实现圆环进度条的具体代码,供大家参考,具体内容如下
效果展示
动画效果
View实现
1.底层圆环是灰色背景 2.上层圆环是红色背景 3.使用动画画一条弧线
View
/**
* 圆环进度条
*/
public class RoundProgressBar extends View {
//绘制矩形区域
private RectF rectF;
//起始角度
private float startAngle;
//扫过角度
private float sweepAngle;
//画笔
private Paint paint;
//默认控件大小
private int defoutSize;
//默认线条宽度
private int defoutLine;
private int strokeWidth;
private PointF pointF = new PointF();
public RoundProgressBar(Context context) {
super(context);
initData();
}
public RoundProgressBar(Context context, AttributeSet attrs) {
super(context, attrs);
initData();
}
/**
* 参数初始化
*/
private void initData() {
startAngle = 0;
sweepAngle = 0;
defoutSize = 400;
defoutLine = 20;
strokeWidth = 20;
rectF = new RectF();
//抗锯齿画笔
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.GRAY);
paint.setStrokeWidth(defoutLine);
//笔帽样式
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStyle(Paint.Style.STROKE);
}
/**
* xml ----- 提供可绘制位置
*
* @param widthMeasureSpec 宽
* @param heightMeasureSpec 高
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(defoutSize, defoutSize);
}
/**
* 当大小时改变回调
*
* @param w
* @param h
* @param oldw
* @param oldh
*/
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
pointF.x = w 1;
pointF.y = h 1;
rectF.top = strokeWidth 1;
rectF.bottom = h - (strokeWidth 1);
rectF.left = strokeWidth 1;
rectF.right = w - (strokeWidth 1);
}
/**
* 绘制
*
* @param canvas
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//画布旋转
paint.setColor(Color.GRAY);
canvas.rotate(135, pointF.x, pointF.y);
//绘制圆环
canvas.drawArc(rectF, startAngle, 270, false, paint);
paint.setColor(Color.RED);
canvas.drawArc(rectF, startAngle, sweepAngle, false, paint);
}
public void setProgress(float index) {
//防止数值越界
if (index 1 || index < 0) {
return;
}
ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, index);
valueAnimator.setDuration(3000);
valueAnimator.setInterpolator(new DecelerateInterpolator());
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
sweepAngle = (float) animation.getAnimatedValue() * 270;
//重写绘制
invalidate();
}
});
valueAnimator.start();
}
}
最后在Activity中使用setProgress方法赋值进度条的进度来实现效果
progressView.setProgress(0.8f);
以上就是本文的全部内容,希望对大家的学习有所帮助。
- WordPress中添加自定义评论表情包的方法(附三套表情包下载)
- 使用新类型Nullable处理数据库表中null字段
- QT Creator 快速入门教程 读书笔记(二)
- 设计模式学习笔记-命令模式
- .com域名和.cn域名的介绍
- Windows安装和使用zookeeper
- 使用MagicAjax 实现无刷新Webparts
- Python 项目实践一(外星人入侵小游戏)第五篇
- Python 项目实践一(外星人入侵小游戏)第三篇
- WordPress自定义栏目运用实例 VI:设置外链缩略图/特色图像
- Python 项目实践一(外星人入侵小游戏)第二篇
- IBatisNet配置
- WordPress设置评论到达一定数量后自动关闭评论功能
- Python 项目实践一(外星人入侵)第一篇
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 轻松上手SpringBoot Security + JWT Hello World示例
- [Go] Golang发送http GET请求
- Windows系统快速安装Superset 0.37
- 商业数据分析从入门到入职(3)Excel进阶应用
- python列表练习
- python元组
- python字典、集合
- 秒懂JVM的三大参数类型,就靠这十个小实验了
- Netty之旅三:Netty服务端启动源码分析,一梭子带走!
- Mysql几种join连接算法
- Flutter 学习笔记 16 - Hero 动画
- sdk冲突记录
- 个人账号密码管理体系(密码篇)
- 熬夜7天,我总结了JavaScript与ES的25个重要知识点!
- 【分享】MPSoC SWDT在Standalone下的应用