android 圆形自定义进度条,Android实现自定义圆形进度条
今天无意中发现一个圆形进度,想想自己实现一个,如下图:
基本思路是这样的:
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实现自定义圆形进度条相关推荐
- Android自定义滑动进度条,Android自定义View实现圆形水波进度条
每次听到某大牛谈论自定义View,顿时敬佩之心,如滔滔江水连绵不绝,心想我什么时候能有如此境界,好了,心动不如行动,于是我开始了自定义View之路,虽然过程有坎坷,但是结果我还是挺满意的.我知道大牛还 ...
- android 自定义音乐圆形进度条,Android自定义View实现音频播放圆形进度条
本篇文章介绍自定义View配合属性动画来实现如下的效果 实现思路如下: 根据播放按钮的图片大小计算出圆形进度条的大小 根据音频的时间长度计算出圆形进度条绘制的弧度 通过Handler刷新界面来更新圆形 ...
- android自定义渐变色圆环,Android实现渐变圆环、圆形进度条效果
最近做了一个功能,里面涉及到了渐变圆形的需求.就是一个颜色可以渐变的圆环,最后实现的效果如下图: 左图是带渐变效果,右图是不带渐变效果.原理还是绘图,Canvas可以绘制的对象有:弧线(arcs).填 ...
- Android自定义圆形下载进度条,Android自定义之圆形进度条
先来看看效果图,有图才有真相: Usage Android Studio 使用Gradle构建 dependencies { compile 'com.github.ws.circleprogress ...
- android 画圆弧动画,『Android自定义View实战』自定义带入场动画的弧形百分比进度条...
写在前面 这是在简书发表的处女座,这个想法也停留在脑海中很久了,一直拖到现在(懒癌发作2333),先自我介绍一番,一枚刚毕业不久的Android程序猿,初出茅庐的Android小生,之前一直在CSDN ...
- android 自定义progressbar demo,Android 自定义进度条ColorfulProgressbar,原理简单、效果还行...
效果图: demo效果演示 演示Demo 特性 与原生Progress相比,感觉更漂亮一点,可以显示进度值,背景凹凸感明显,进度条效果更加立体. 原理说明 额,挺简单的.不过感觉我的做法有点复杂了,我 ...
- Android自定义成长值、等级、积分进度条(带属性动画)
现在很多APP的会员进度条.等级.积分进度条都是按分段显示的,由于最近自己的项目也用到类似的控件,如下图所示,于是就自己撸了一个! package progressandanimation.wtt.c ...
- android 积分增加动画,Android自定义成长值、等级、积分进度条(带属性动画)
现在很多APP的会员进度条.等级.积分进度条都是按分段显示的,由于最近自己的项目也用到类似的控件,如下图所示,于是就自己撸了一个! package progressandanimation.wtt.c ...
- android自定义圆角进度条,Android自定义进度条的圆角横向进度条实例详解
1.本文将向你介绍自定义进度条的写法,比较简单,但还是有些知识点是需要注意的: invalidate()方法 RectF方法的应用 onMeasure方法的应用 2.原理 画3层圆角矩形,底层为黑色, ...
- 自定义android进度条渐变,自定义ProgressBar简单完成颜色渐变功能进度条
我们在使用电脑或者手机时,经常会遇到进度条,比如下图: 今天我来演示一下,如何做出简单并且漂亮的颜色渐变进度条. 首先我先新建了一个系统默认样式的进度条,代码如下: 运行后显示如下: 大家可以看出,并 ...
最新文章
- Simple NHibernate Architecture[from]
- CentOS7 编译 Gradle
- 智能包装结构,提高可测性
- 【OS学习笔记】三十二 保护模式九:分页机制对应的汇编代码之---内核代码
- Android 设置 横屏 竖屏 (转)
- android AChartEnginee讲解之源码框架解读
- 通过模板生成Excel表格——XLSTransformer
- 软考论文案例-论微服务架构及其应用
- 关于SQL2005安装后更改计算机名后…
- RESCRIPt:序列分类参考数据库管理工具
- 看完这篇人工智能的文章,能帮你超越90%的人
- 超算计算机需要显卡吗,NVIDIA:中国超算性能世界第一认了 但省电我最强
- Excel数据驱动框架实战
- 目前住院病人主要由护士护理
- 【Vuforia】最佳实践:支持作为模型目标(Model Targets)的对象和CAD模型
- Android Studio 编译时报文件不能删除,编译失败
- 品优购项目--注册页面
- 【黑马程序员西安中心】 css布局
- ActionScript 3.0权威指南
- 北航2022软件工程第三次作业——结对编程(最长英语单词链)
热门文章
- 2017-06-11 Padavan 完美适配newifi mini【adbyby+SS+KP ...】youku L1 /小米mini
- 【设计过程】.NET ORM FreeSql WhereDynamicFilter 动态表格查询功能
- 卓岚APP远程采集正泰单相电子式电能表 ZLAN5144J的应用分享
- 英文横版游戏《玛丽师傅》源码H5+安卓+IOS三端源码
- C10K 和 C1000K
- mysql之魔鬼训练营
- usb redirector linux,USB Redirector Client详细使用教程
- 病毒分析四:steam盗号病毒
- 8uftp工具,这款工具有什么作用?它的优势在哪里?
- Charles进行弱网测试