全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android自定义漂亮的圆形进度条

这几天对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小时内与您取得联系。