android绘制环形进度_Android实现环形进度条代码

先上效果图:

自定义控件:AttendanceProgressBar

代码如下:

public class AttendanceProgressBar extends View {

// 画圆环底部的画笔

private Paint mCirclePaint;

// 画圆环的画笔

private Paint mRingPaint;

// 画字体的画笔

private Paint mTextPaint;

// 圆形颜色

private int mCircleColor;

// 圆环颜色

private int mRingColor;

// 半径

private float mRadius;

// 圆环半径

private float mRingRadius;

// 圆环宽度

private float mStrokeWidth;

// 圆心x坐标

private int mXCenter;

// 圆心y坐标

private int mYCenter;

// 字的长度

private float mTxtWidth;

// 字的高度

private float mTxtHeight;

// 总进度

private int mTotalProgress = 100;

// 当前进度

private int mProgress = 80;

//字体颜色

private int mTextColor;

// 字体大小

private float mTextSize;

public AttendanceProgressBar(Context context, AttributeSet attrs) {

super(context, attrs);

// 获取自定义的属性

initAttrs(context, attrs);

initVariable();

}

private void initAttrs(Context context, AttributeSet attrs) {

TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs,

R.styleable.AttendanceProgressBar, 0, 0);

mRadius = typeArray.getDimension(R.styleable.AttendanceProgressBar_radius, 80);

mStrokeWidth = typeArray.getDimension(R.styleable.AttendanceProgressBar_strokeWidth, 10);

mCircleColor = typeArray.getColor(R.styleable.AttendanceProgressBar_circleColor, 0xFFFFFFFF);

mRingColor = typeArray.getColor(R.styleable.AttendanceProgressBar_ringColor, 0xFFFFFFFF);

mTextColor = typeArray.getColor(R.styleable.AttendanceProgressBar_textColor, 0xFF000000);

mTextSize = typeArray.getDimension(R.styleable.AttendanceProgressBar_textSize, 80);

mRingRadius = mRadius + mStrokeWidth / 2;

}

private void initVariable() {

mCirclePaint = new Paint();

mCirclePaint.setAntiAlias(true);

mCirclePaint.setColor(mCircleColor);

// mCirclePaint.setStyle(Paint.Style.FILL);

mCirclePaint.setStyle(Paint.Style.STROKE);

mCirclePaint.setStrokeWidth(mStrokeWidth);

mRingPaint = new Paint();

mRingPaint.setAntiAlias(true);

mRingPaint.setColor(mRingColor);

mRingPaint.setStyle(Paint.Style.STROKE);

mRingPaint.setStrokeWidth(mStrokeWidth);

mTextPaint = new Paint();

mTextPaint.setAntiAlias(true);

mTextPaint.setStyle(Paint.Style.FILL);

mTextPaint.setColor(mTextColor);

// mTextPaint.setARGB(255, 255, 255, 255);

// mTextPaint.setTextSize(mRadius / 2);

mTextPaint.setTextSize(mTextSize);

Paint.FontMetrics fm = mTextPaint.getFontMetrics();

mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent);

}

@Override

protected void onDraw(Canvas canvas) {

mXCenter = getWidth() / 2;

mYCenter = getHeight() / 2;

// canvas.drawCircle(mXCenter, mYCenter, mRadius, mCirclePaint);

canvas.drawCircle(mXCenter, mYCenter, mRingRadius, mCirclePaint);

RectF oval = new RectF();

oval.left = (mXCenter - mRingRadius);

oval.top = (mYCenter - mRingRadius);

oval.right = mRingRadius * 2 + (mXCenter - mRingRadius);

oval.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);

canvas.drawArc(oval, -90, ((float) mProgress / mTotalProgress) * 360, false, mRingPaint); //

// canvas.drawCircle(mXCenter, mYCenter, mRadius + mStrokeWidth / 2, mRingPaint);

// String txt = mProgress + "%";

String txt = "16/18";

mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());

// canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter + mTxtHeight / 4, mTextPaint);

canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter + mTxtHeight / 4 - dipToPx(10), mTextPaint);

txt = "出勤人数";

mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());

canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter + mTxtHeight / 4 + dipToPx(10), mTextPaint);

}

public void setProgress(int progress) {

mProgress = progress;

postInvalidate();

}

private int dipToPx(int dip) {

float scale = getContext().getResources().getDisplayMetrics().density;

return (int) (dip * scale + 0.5f * (dip >= 0 ? 1 : -1));

}

}

因为是自定义控件,所以在attr.xml文件定义了一些控件属性,以便在xml文件中设置这些属性

代码如下:

最后,在xml文件中,可以这样使用

android:layout_gravity="center"

android:layout_width="100dp"

android:layout_height="100dp"

app:radius="45dp"

app:strokeWidth="5dp"

app:textSize="@dimen/text_16"

app:textColor="@color/color_333333"

app:circleColor="@color/color_d5ebfd"

app:ringColor="@color/color_2c9df7"/>

这只是初步处理,使用时可以根据需求酌情处理。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持dt猫。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙后的时期有什么,鸿蒙系统什么时候上市 华为鸿蒙系统有多厉害?

由于谷歌停止与华为的部分合作,华为的绝密武器“鸿蒙系统”也随之曝光。按照余承东的说法,早在七年之前鸿蒙系统已经开始研发,时至今日鸿蒙系统终于有机会上市,成为华为的新操作系统。鸿蒙系统被誉为备胎计划,此系统就…

centos7系统引导自动重启_centos7 windows7 双系统重新构建引导和启动顺序

安装centos后无法引导启动windows7的解决方法在电脑Windows7系统上安装Centos7,安装后找不到Windows7引导菜单。原因:因为CentOS 7已采用新式的grub2系统,所以需要进入/boot/grub2目录后使用vi编辑grub.cfg文件。解决方法一:修改C…

android确认密码代码,Android自定义View实现验证码or密码输入框

前言最近项目中有支付功能,用户输入密码时要类似微信支付密码输入框的样式,本想直接copy网上的,但设计姐姐总是对样式挑三拣四,抽空自己自定义了一个,无奈之下抽空自定义了个,并把它贴到GitHub上供网友们参…

一阶广义差分模型_广义差分法的eviews软件实现

广义差分法的eviews软件实现 1,计量经济学,第六章 自 相 关,2,引子t检验和F检验一定就可靠吗,研究居民储蓄存款 与居民收入 的关系 用普通最小二乘法估计其参数,结果为 (1.8690) 0.0055 14.9343 64.2069,3,检验结果表明回归系数的标准误差非常小,t 统计量…

华为鸿蒙再次公测,华为鸿蒙开启第二轮公测,新增7款机型,有你的吗?

原标题:华为鸿蒙开启第二轮公测,新增7款机型,有你的吗?华为鸿蒙操作系统,相信这是很多人都非常期待的操作系统,这个操作系统经过各方评测之后,得到的反馈都要远比华为此前所搭载的基于安卓开发的…

同行不支持鸿蒙系统,鸿蒙系统虽好,但也需要国内同行支持

原标题:鸿蒙系统虽好,但也需要国内同行支持鸿蒙系统将在不久正式推出,但是鸿蒙系统虽好,但也离不开国内同行的支持。鸿蒙系统的细节透露后,被广大数码爱好者所重视。作为一款不同于苹果IOS以及安卓系统外的其他手机系统…

linux主机开放ftp、http服务_Linux系统与Windows系统哪个好呢(一)

当Windows与Linux作为VPS云主机操作系统的对比时,需要专注于小企业主最相关的因素,一个明显的赢家出现了,现在我们来看看吧。Linux与Windows的比较:任何虚拟主机操作系统都应该快速且稳定,但当企业选择VPS主机时&#…

国内厂商对鸿蒙系统的态度,鸿蒙系统4月上线,国内手机厂商态度很关键!小米、中兴出乎意料...

前段时间,华为举行了新品发布会,在这个发布会上,华为宣布了两件事情,第一就是华为全新的折叠屏手机Mate X2正式亮相了,而第二件事情更加让人惊喜,余承东已经确认,华为的鸿蒙系统将会在4月份上线…

hal库开启中断关中断_stm32的HAL库开发学习笔记之外部中断

外部中断中断线————EXTI线0~15(对应外部IO口的输入中断)每个IO口都可以作为外部中断输入每个中短线可以独立的配置触发方式(上升沿,下降沿,双边沿),触发/屏蔽,专用状态位。GPIO与中断线映射关系EXTI0->PA0,PB0,PC0,……PI0…

kindle的xray怎么用_Xray使用的一些经验分享

前言xray被动扫描器,是我目前个人挖洞过程中,感觉最好用的一款扫描器。这篇博客,分享一下我使用xray的一些小心得吧官方github:https://github.com/chaitin/xray官网文档:https://xray.cool/xrayburp的使用普通使用配置…

字符串属于python有序序列、支持双向索引_字符串属于Python有序序列,和列表、元组一样都支持双向索引。...

【多选题】框架梁上部纵筋包括哪些( )【单选题】钢筋半圆弯钩的长度应为下列哪项。【单选题】检验蔬菜质量的主要指标是【判断题】新鲜鳓鱼初加工时要去鳞,因为鳓鱼腥味较大【判断题】低级格式化可以彻底消除硬盘坏道,使硬盘重获新生。【单选题】.鲜草菇呈____色,以菌苞未破,呈…

移动设备 (Android),How-To Geek正在寻找专注于移动设备(Android,iOS,可穿戴设备等)的作家 | MOS86...

随着移动技术的发展和扩展,我们的覆盖范围也在不断扩大。 我们正在寻找经验丰富,专业和知识渊博的自由作家,以帮助将我们的移动内容提高到一个新的水平。我们正在寻找经验丰富的作家来帮助报道有关移动技术的新闻和社论解说。 理想的人选将精…

sh执行文件 参数传递_Shell脚本传参数方法总结

一、接收固定长度的参数[rootsvn shell_example]# cat params.sh#!/bin/bash#传参测试脚本echo "My name is basename $0 -I was called as $0"echo "My first parameter is : $1"echo "My second parameter is : $2"空参数执行[rootsvn shell_e…

android mdpi对应哪一个屏幕,android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配...

1 Android手机目前常见的分辨率1.1 手机常见分辨率:4:3VGA 640*480 (Video Graphics Array)QVGA 320*240 (Quarter VGA)HVGA 480*320 (Half-size VGA)SVGA 800*600 (Super VGA)5:3WVGA 800*480 (Wide VGA)16:9FWVGA 854*480 (Full Wide VGA)HD 1920*1080 High D…

datatable筛选条件_C#利用DataView的RowFilter对DataTable进行查询筛选

1、筛选某个字段满足指定条件的记录DataView dv myDs.Tables[0].DefaultView;dv.RowFilter "Year1427";gv.DataSource dv;Year这个是myDs.Tables[0]的一个字段。这样就是只有Year的值等于1427的记录绑定gv控件。2、用RowFilter对指定列进行模糊匹配我们都知道sql语…

用linq查询html中div个数,C#使用Linq to XML进行XPath查询

最近在用到HtmlAgliltyPack进行结点查询时,发现这里选择结点使用的是XPath。所以这里总结一下在C#中使用XPath查询XML的方式。习惯了用Linq,这里也是用的Linq to xml的。Linq To XML的核心类是XDocument和XElement、XAttribute,下面简单介绍一…

csp怎么给线条描边_PS的四种“描边”方式你都知道吗?Photoshop小知识

1.编辑描边基于位图的运算描边方式在画布里输入需要的文字,对图层单击右键,选择“栅格化文字”。选择顶栏的编辑菜单,选择“描边”,弹出描边对话框后调节粗细、颜色和描边位置,点击“确认”即可。从一些细节我们可以看…

学编导还是学计算机,高二学编导烧钱吗

高二学编导烧钱吗2019-09-22 10:34:23文/马妍高二学编导还是很费钱的。艺术专业的学习普遍都很贵,学编导总体需要3-6万元左右。一般培训班要两到三万,还需要购买一些专业的设备,费用也不低。编导专业简介编导有广义和狭义之分,狭义…

两个质数互质是_科学网—理解黎曼猜想(二)两个自然数互质的概率是多少? - 袁岚峰的博文...

导读:任选两个自然数,它们互质的概率是多少?它就是s 2时欧拉乘积公式右边的连乘的倒数,因此它等于s 2时欧拉乘积公式左边的连加的倒数,即1/ζ(2)。而ζ(2) π^2/6,因此这个概率等于6/π^2 ≈ 60.79%。同…