它们的定义View最后的研究,首先在效果图。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE2MzcyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">



相信大家心中都有自己的实现方法,这里就贴上我的方法以供參考。

/**
* 刻度画笔
*/
private Paint linePaint;
/**
* 进度画笔
*/
private Paint textPaint;
/**
* 进度
*/
private int index = 0;
/**
* 刻度
*/
private int ruling = 0;
	private void init() {
linePaint = new Paint();
linePaint.setColor(Color.BLACK);
linePaint.setStrokeWidth(5);
linePaint.setAntiAlias(true);
linePaint.setStyle(Style.FILL); textPaint = new Paint(linePaint);
textPaint.setTextSize(70);
textPaint.setColor(Color.WHITE); handler.sendEmptyMessage(0);
handler.sendEmptyMessageDelayed(1, 2000);
}

上述相信大家都能够明确。。接下来就是最关键的onDraw()

	@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//移动画布
canvas.translate(getWidth() / 2, getHeight() / 2);
//填充背景
canvas.drawColor(getResources().getColor(R.color.gray));
//刻度总数
int count = 30;
//进度字占大小
Rect rect = new Rect();
String indexsString = String.valueOf(index);
if (index < 10) {
indexsString = "0" + indexsString;
}
textPaint.getTextBounds(indexsString, 0, indexsString.length(), rect);
//进度字体
canvas.drawText(indexsString, -rect.width() / 2, rect.height() / 2,
textPaint);
//旋转画布,画刻度,并依据ruling值来改变颜色
for (int i = 0; i < count; i++) {
if (i <= ruling) {
linePaint.setColor(getResources().getColor(R.color.pink));
} else {
linePaint.setColor(Color.BLACK);
}
canvas.drawLine(0, 100, 0, 120, linePaint);
canvas.rotate(360 / count, 0, 0);
}
}

凝视的应该非常具体不懂的也能够留言,接下来看看效果

完毕了这个之后相信第二个也是手到擒来!

/**
* 圆环
*/
private Paint rectPaint;
/**
* 刻度
*/
private Paint linePaint;
/**
* 填充
*/
private Paint fillPaint;
/**
* 进度字
*/
private Paint textPaint;
private int index = 0;
private int index2 = 0; public ProgressView2(Context context) {
this(context, null);
// TODO Auto-generated constructor stub
} public ProgressView2(Context context, AttributeSet attrs) {
this(context, attrs, 0);
// TODO Auto-generated constructor stub
} public ProgressView2(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(); }

	private void init() {
rectPaint = new Paint();
rectPaint.setAntiAlias(true);
rectPaint.setStrokeWidth(20);
rectPaint.setStyle(Style.STROKE);
rectPaint.setColor(getResources().getColor(R.color.dark)); linePaint = new Paint(rectPaint);
linePaint.setStrokeWidth(20);
linePaint.setColor(getResources().getColor(R.color.pink)); fillPaint = new Paint(linePaint);
fillPaint.setStrokeWidth(1);
fillPaint.setColor(Color.BLACK);
fillPaint.setAlpha(60); textPaint = new Paint();
textPaint.setStrokeWidth(5);
textPaint.setAntiAlias(true);
textPaint.setTextSize(70);
textPaint.setColor(Color.WHITE); handler.sendEmptyMessage(0);
handler.sendEmptyMessage(1);
}
	@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//刻度数
int count = 60;
//背景色
canvas.drawColor(getResources().getColor(R.color.gray));
//移动画布
canvas.translate(getWidth() / 2, getHeight() / 2);
//圆环大小
RectF rectF = new RectF(-100, -100, 100, 100);
String indexString = String.valueOf(index);
if (index < 10) {
indexString = "0" + indexString;
}
Rect rect = new Rect();
textPaint.getTextBounds(indexString, 0, <span style="font-family: Arial, Helvetica, sans-serif;">indexString </span><span style="font-family: Arial, Helvetica, sans-serif;">.length(), rect);</span>
canvas.drawText(indexString, -rect.width() / 2, rect.height() / 2,
textPaint);
//圆环
canvas.drawArc(rectF, 0, 360, false, rectPaint);
//填充色
canvas.drawArc(rectF, -90, index, false, linePaint);
for (int i = 0; i < index2; i++) {
canvas.drawLine(0, -90, 0, -110, fillPaint);
canvas.rotate(360 / count, 0, 0);
} }

效果图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDE2MzcyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

PS:上传的代码中有一个bug,再onDraw中衡量字体大小时不应该用“00”.length(),应该用indexString.length()

粗心大意要不得啊

项目源代码

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Android 定义自己的学习(5)它们的定义Progressbar的更多相关文章

  1. Android之动画的学习(转载)

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  2. Android自动化测试之Monkeyrunner学习笔记(一)

    Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...

  3. Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  4. Android(java)学习笔记160:Framework运行环境之 Android进程产生过程

    1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...

  5. Android(java)学习笔记205:网易新闻RSS客户端应用编写逻辑过程

    1.我们的项目需求是编写一个新闻RSS浏览器,RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS目前广泛用于网上新闻频道,bl ...

  6. Android(java)学习笔记204:自定义SmartImageView(继承自ImageView,扩展功能为自动获取网络路径图片)

    1.有时候Android系统配置的UI控件,不能满足我们的需求,Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高. ...

  7. Android(java)学习笔记233: 远程服务的应用场景(移动支付案例)

    一. 移动支付:       用户需要在移动终端提交账号.密码以及金额等数据 到 远端服务器.然后远端服务器匹配这些信息,进行逻辑判断,进而完成交易,返回交易成功或失败的信息给移动终端.用户提交账号. ...

  8. 20172327 2018-2019-1 《第一行代码Android》第二章学习总结

    学号 2017-2018-2 <第一行代码Android>第二章学习总结 教材学习内容总结 - 活动是什么: 活动(Activity)是最容易吸引用户的地方,它是一种可以包含用户界面的组件 ...

  9. 20172327 2018-2019-1 《第一行代码Android》第一章学习总结

    学号 2018-2019-1 <第一行代码Android>第一章学习总结 教材学习内容总结 - Android系统架构: 1.Linux内核层 Android系统是基于Linux内核的,这 ...

随机推荐

  1. Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统

    继续并发专题~ 这次介绍CyclicBarrier:看一眼API的注释: /** * A synchronization aid that allows a set of threads to all ...

  2. SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法

    原文:SqlBulkCopy批量插入数据时,不执行触发器和约束的解决方法 在new SqlBulkCopy对象的时候,设置一下SqlBulkCopyOptions选项即可,按位或运算 SqlBulkC ...

  3. 利用Pattern和Mather来禁止特殊字符的输入

    String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}[]‘::”“’.,.?]&q ...

  4. VC版八皇后

    一.  功能需求: 1. 可以让玩家摆棋,并让电脑推断是否正确 2. 能让电脑给予帮助(给出全部可能结果) 3. 实现悔棋功能 4. 实现重置功能 5. 加入点按键音效果更佳 二.  整体设计计: 1 ...

  5. UI 纯代码实现计算器

    //  MHTAppDelegate.h //  TestCa //  Copyright (c) 2014年 Summer. All rights reserved. #import <UIK ...

  6. Windows无法启动OracleOraDb10g_home1TNSListener维修,1错误067

    Oracle服务无法启动,据报:Windows无法启动OracleOraDb10g_home1TNSListener维修,错误 1067:这个过程意外终止. 在网上找了好久也没弄好.说什么环境变量的又 ...

  7. [LeetCode] Search in Rotated Sorted Array II [36]

    称号 Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would t ...

  8. 马云收购UC你,至于到底是谁宣战

    近日,阿里巴巴官方正式宣布,UC优视全资融入阿里巴巴集团,并组建阿里UC移动事业群. 据阿里方面表示,整个交易对UC的估值远超百度对91无线的估值,外界推測估值近50美元.是中国互联网最大一笔交易.业 ...

  9. w3wp占用CPU过高

    w3wp占用CPU过高 在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一 ...

  10. 第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器

    原文:第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 前言: 在前一章已经演示了如何使用SSMS来配置资源调控器.但是作为DBA,总有需要写脚本的时候,因为它可以重用及扩展. ...