这几天对Android中实现画圆弧及圆弧效果中所实现的效果进行了修改,改为进度圆心进度条,效果如图所示
TasksCompletedView.java 代码如下
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Paint.FontMetrics;
import android.util.AttributeSet;
import android.view.View;
import com.snailws.taskscompleted.R;
/**
* @author naiyu(http://snailws.com)
* @version 1.0
*/
public class TasksCompletedView 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;
public TasksCompletedView(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.TasksCompletedView, 0, 0);
mRadius = typeArray.getDimension(R.styleable.TasksCompletedView_radius, 80);
mStrokeWidth = typeArray.getDimension(R.styleable.TasksCompletedView_strokeWidth, 10);
mCircleColor = typeArray.getColor(R.styleable.TasksCompletedView_circleColor, 0xFFFFFFFF);
mRingColor = typeArray.getColor(R.styleable.TasksCompletedView_ringColor, 0xFFFFFFFF);
mRingRadius = mRadius + mStrokeWidth / 2;
}
private void initVariable() {
mCirclePaint = new Paint();
mCirclePaint.setAntiAlias(true);
mCirclePaint.setColor(mCircleColor);
mCirclePaint.setStyle(Paint.Style.FILL);
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.setARGB(255, 255, 255, 255);
mTextPaint.setTextSize(mRadius / 2);
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);
if (mProgress > 0 ) {
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 + "%";
mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());
canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter + mTxtHeight / 4, mTextPaint);
}
}
public void setProgress(int progress) {
mProgress = progress;
// invalidate();
postInvalidate();
}
}
attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="TasksCompletedView">
<attr name="radius" format="dimension"/>
<attr name="strokeWidth" format="dimension"/>
<attr name="circleColor" format="color"/>
<attr name="ringColor" format="color"/>
</declare-styleable>
</resources>
源码下载:http://xiazai./201701/yuanma/AndroidCompleted().rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 进度条
# Android自定义控件实现带数值和动画的圆形进度条
# Android编程之ProgressBar圆形进度条颜色设置方法
# Android三种方式实现ProgressBar自定义圆形进度条
# Android带进度的圆形进度条
# 自定义Android圆形进度条(附源码)
# Android使用Canvas绘制圆形进度条效果
# Android studio圆形进度条 百分数跟随变化
# Android自定义控件实现圆形进度条
# Android自定义View之圆形进度条式按钮
# Android自定义控件实现带文本与数字的圆形进度条
# 自定义
# 这几天
# 大家多多
# 进行了
# 源码下载
# 如图所示
# float
# mRadius
# mRingColor
# mCircleColor
# mXCenter
# mYCenter
# mRingRadius
# mStrokeWidth
# extends
# private
# public
# mTextPaint
# int
相关文章:
建站主机类型有哪些?如何正确选型
,柠檬视频怎样兑换vip?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
招商网站制作流程,网站招商广告语?
制作销售网站教学视频,销售网站有哪些?
建站主机服务器选购指南:轻量应用与VPS配置解析
个人摄影网站制作流程,摄影爱好者都去什么网站?
常州自助建站工具推荐:低成本搭建与模板选择技巧
c++怎么用jemalloc c++替换默认内存分配器【性能】
宝塔建站无法访问?如何排查配置与端口问题?
高端云建站费用究竟需要多少预算?
,南京靠谱的征婚网站?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
如何在IIS7中新建站点?详细步骤解析
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
TestNG的testng.xml配置文件怎么写
建站之星安装需要哪些步骤及注意事项?
如何快速搭建高效可靠的建站解决方案?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
在线教育网站制作平台,山西立德教育官网?
如何在香港免费服务器上快速搭建网站?
c# 在高并发场景下,委托和接口调用的性能对比
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
建站之星×万网:智能建站系统+自助建站平台一键生成
北京网站制作的公司有哪些,北京白云观官方网站?
长沙做网站要多少钱,长沙国安网络怎么样?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何挑选优质建站一级代理提升网站排名?
建站之星后台密码如何安全设置与找回?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何通过IIS搭建网站并配置访问权限?
网页设计与网站制作内容,怎样注册网站?
建站主机数据库如何配置才能提升网站性能?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
javascript中的try catch异常捕获机制用法分析
如何在阿里云域名上完成建站全流程?
高端建站如何打造兼具美学与转化的品牌官网?
网站制作需要会哪些技术,建立一个网站要花费多少?
北京的网站制作公司有哪些,哪个视频网站最好?
建站之星与建站宝盒如何选择最佳方案?
已有域名和空间如何搭建网站?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
已有域名如何快速搭建专属网站?
一键网站制作软件,义乌购一件代发流程?
如何快速搭建自助建站会员专属系统?
高端建站三要素:定制模板、企业官网与响应式设计优化
*请认真填写需求信息,我们会在24小时内与您取得联系。