今天无意中发现一个圆形进度,想想自己实现一个,如下图:

基本思路是这样的:

1.首先绘制一个实心圆

2.绘制一个白色实心的正方形,遮住实心圆

3.在圆的中心动态绘制当前进度的百分比字符

4.绘制一个与之前实心圆相同颜色的空心圆

5.逐渐改变当前的百分比

6.根据百分比,逐渐改变正方形的大小,逐渐减小正方形的底部y轴的坐标,不断重绘,直到达到100%

首先看看自定义的属性

在values目录下新建attrs.xml内容如下:

定义绘制圆形的背景色,和绘制圆形的半径大小

自定义视图

import android.annotation.SuppressLint;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.text.TextPaint;

import android.util.AttributeSet;

import android.util.Log;

import android.view.View;

public class CirclePro extends View {

private Paint paint;

private int circleBack;//圆的背景色

private int mschedual = 0;//用于控制动态变化

float circleHalf; //圆的半径

String percent = "";//绘制百分比的字符串

@SuppressLint("Recycle")

public CirclePro(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

paint = new Paint();

TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.myCircleImage, defStyleAttr,0);

@SuppressWarnings("unused")

int leng = array.length();

//获取自定义的属性,这里注意是R.styleable.myCircleImage_circlecolor而不是R.attr.circlecolor

circleBack = array.getColor(R.styleable.myCircleImage_circlecolor,Color.GREEN);

circleHalf = array.getDimension(R.styleable.myCircleImage_half,200.f);

System.out.println(circleBack);

}

/**

* 这个构造参数,当在布局文件中引用该view的时候,必须重写该构造函数

* @param context

* @param attrs

*/

public CirclePro(Context context, AttributeSet attrs) {

this(context, attrs, 0);//调用自己的构造函数

}

/**

* 根据文本的

* @param text

* @param textSize

* @return

*/

public float getTextWidth(String text,float textSize) {

TextPaint textPaint = new TextPaint();

textPaint.setTextSize(textSize);

return textPaint.measureText(text);

}

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

float height = getHeight();

float width = getWidth();

// float circleHalf = (float) (width*0.7/2);

paint.setColor(circleBack);

paint.setAntiAlias(true);

paint.setStyle(Paint.Style.FILL);

canvas.drawCircle(width/2,height/2,circleHalf, paint);//画实心圆

if (mschedual <= 100) {//,如果当前进度小于100,画实心矩形

paint.setColor(Color.WHITE);

canvas.drawRect(width/2-circleHalf,height/2-circleHalf,width/2+circleHalf,height/2+circleHalf - mschedual*circleHalf/50, paint);

}

//画当前进度的字符串

paint.setColor(Color.BLACK);

paint.setTextSize(30.f);

percent = mschedual+" %";

canvas.drawText(percent, width/2-getTextWidth(percent,30)/2,height/2+paint.getTextSize()*3/8, paint);//字体的高度=paint.getTextSize()*3/4

//画空心圆

paint.setColor(circleBack);

paint.setStyle(Paint.Style.STROKE);

canvas.drawCircle(width/2,height/2,circleHalf, paint);

if (mschedual < 100) {//更改当前进度值,并重绘

mschedual++;

invalidate();

}

}

}

在activity_main.xml中,需要用到自定义的属性,首先添加命名空间: xmlns:liu=”http://schemas.android.com/apk/res/com.example.androidcirclepro”

其中liu是自定义的一个前缀,随意命名的,com.example.androidcirclepro是我们的应用的包名

activity_main.xmln内容如下:

xmlns:tools="http://schemas.android.com/tools"

xmlns:liu="http://schemas.android.com/apk/res/com.example.androidcirclepro"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context=".MainActivity" >

android:layout_width="match_parent"

android:layout_height="match_parent"

liu:half="90dp"

liu:circlecolor="#fff0f0"

/>

至此一个自定义的圆形进度条就完成了,是不是很简单。

android 圆形自定义进度条,Android实现自定义圆形进度条相关推荐

  1. Android自定义滑动进度条,Android自定义View实现圆形水波进度条

    每次听到某大牛谈论自定义View,顿时敬佩之心,如滔滔江水连绵不绝,心想我什么时候能有如此境界,好了,心动不如行动,于是我开始了自定义View之路,虽然过程有坎坷,但是结果我还是挺满意的.我知道大牛还 ...

  2. android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条

    本篇文章介绍自定义View配合属性动画来实现如下的效果 实现思路如下: 根据播放按钮的图片大小计算出圆形进度条的大小 根据音频的时间长度计算出圆形进度条绘制的弧度 通过Handler刷新界面来更新圆形 ...

  3. android自定义渐变色圆环,Android实现渐变圆环、圆形进度条效果

    最近做了一个功能,里面涉及到了渐变圆形的需求.就是一个颜色可以渐变的圆环,最后实现的效果如下图: 左图是带渐变效果,右图是不带渐变效果.原理还是绘图,Canvas可以绘制的对象有:弧线(arcs).填 ...

  4. Android自定义圆形下载进度条,Android自定义之圆形进度条

    先来看看效果图,有图才有真相: Usage Android Studio 使用Gradle构建 dependencies { compile 'com.github.ws.circleprogress ...

  5. android 画圆弧动画,『Android自定义View实战』自定义带入场动画的弧形百分比进度条...

    写在前面 这是在简书发表的处女座,这个想法也停留在脑海中很久了,一直拖到现在(懒癌发作2333),先自我介绍一番,一枚刚毕业不久的Android程序猿,初出茅庐的Android小生,之前一直在CSDN ...

  6. android 自定义progressbar demo,Android 自定义进度条ColorfulProgressbar,原理简单、效果还行...

    效果图: demo效果演示 演示Demo 特性 与原生Progress相比,感觉更漂亮一点,可以显示进度值,背景凹凸感明显,进度条效果更加立体. 原理说明 额,挺简单的.不过感觉我的做法有点复杂了,我 ...

  7. Android自定义成长值、等级、积分进度条(带属性动画)

    现在很多APP的会员进度条.等级.积分进度条都是按分段显示的,由于最近自己的项目也用到类似的控件,如下图所示,于是就自己撸了一个! package progressandanimation.wtt.c ...

  8. android 积分增加动画,Android自定义成长值、等级、积分进度条(带属性动画)

    现在很多APP的会员进度条.等级.积分进度条都是按分段显示的,由于最近自己的项目也用到类似的控件,如下图所示,于是就自己撸了一个! package progressandanimation.wtt.c ...

  9. android自定义圆角进度条,Android自定义进度条的圆角横向进度条实例详解

    1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色, ...

  10. 自定义android进度条渐变,自定义ProgressBar简单完成颜色渐变功能进度条

    我们在使用电脑或者手机时,经常会遇到进度条,比如下图: 今天我来演示一下,如何做出简单并且漂亮的颜色渐变进度条. 首先我先新建了一个系统默认样式的进度条,代码如下: 运行后显示如下: 大家可以看出,并 ...

最新文章

  1. Simple NHibernate Architecture[from]
  2. CentOS7 编译 Gradle
  3. 智能包装结构,提高可测性
  4. 【OS学习笔记】三十二 保护模式九:分页机制对应的汇编代码之---内核代码
  5. Android 设置 横屏 竖屏 (转)
  6. android AChartEnginee讲解之源码框架解读
  7. 通过模板生成Excel表格——XLSTransformer
  8. 软考论文案例-论微服务架构及其应用
  9. 关于SQL2005安装后更改计算机名后…
  10. RESCRIPt:序列分类参考数据库管理工具
  11. 看完这篇人工智能的文章,能帮你超越90%的人
  12. 超算计算机需要显卡吗,NVIDIA:中国超算性能世界第一认了 但省电我最强
  13. Excel数据驱动框架实战
  14. 目前住院病人主要由护士护理
  15. 【Vuforia】最佳实践:支持作为模型目标(Model Targets)的对象和CAD模型
  16. Android Studio 编译时报文件不能删除,编译失败
  17. 品优购项目--注册页面
  18. 【黑马程序员西安中心】 css布局
  19. ActionScript 3.0权威指南
  20. 北航2022软件工程第三次作业——结对编程(最长英语单词链)

热门文章

  1. 2017-06-11 Padavan 完美适配newifi mini【adbyby+SS+KP ...】youku L1 /小米mini
  2. 【设计过程】.NET ORM FreeSql WhereDynamicFilter 动态表格查询功能
  3. 卓岚APP远程采集正泰单相电子式电能表 ZLAN5144J的应用分享
  4. 英文横版游戏《玛丽师傅》源码H5+安卓+IOS三端源码
  5. C10K 和 C1000K
  6. mysql之魔鬼训练营
  7. usb redirector linux,USB Redirector Client详细使用教程
  8. 病毒分析四:steam盗号病毒
  9. 8uftp工具,这款工具有什么作用?它的优势在哪里?
  10. Charles进行弱网测试