项目小案例画一个进度条,中间还有进度的百分比
2017-11-01 19:21
381 查看
package com.bwei.im.view; | |
import android.content.Context; | |
import android.graphics.Canvas; | |
import android.graphics.Color; | |
import android.graphics.Paint; | |
import android.graphics.Rect; | |
import android.graphics.RectF; | |
import android.support.annotation.Nullable; | |
import android.util.AttributeSet; | |
import android.view.View; | |
/** | |
* Created by muhanxi on 17/11/1. | |
*/ | |
public class CustomProgrssView extends View { | |
//定义一个画笔 | |
private Paint paint ; | |
private boolean runing = true ; | |
private int progress = 0 ; | |
public CustomProgrssView(Context context) { | |
super(context); | |
} | |
public CustomProgrssView(Context context, @Nullable AttributeSet attrs) { | |
super(context, attrs); | |
//创建一个画笔 | |
paint = new Paint(); | |
// 抗锯齿 | |
paint.setAntiAlias(true); | |
//设置画笔的颜色 | |
paint.setColor(Color.RED); | |
//设置画笔 填充是空心的 | |
paint.setStyle(Paint.Style.STROKE); | |
new Thread(new Runnable() { | |
@Override | |
public void run() { | |
while (runing){ | |
if(progress >= 360){ | |
runing = false; | |
return; | |
} | |
System.out.println("progress = " + progress); | |
progress += 10 ; | |
//子线程刷新 系统调用onDraw() 方法 | |
postInvalidate(); | |
try { | |
Thread.sleep(100); | |
} catch (InterruptedException e) { | |
e.printStackTrace(); | |
} | |
} | |
} | |
}).start(); | |
} | |
float sweep ; | |
public CustomProgrssView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { | |
super(context, attrs, defStyleAttr); | |
} | |
@Override | |
protected void onDraw(Canvas canvas) { | |
super.onDraw(canvas); | |
// getWidth() 获取当前View 的宽度 | |
int x = getWidth() / 2 ; | |
int y = getHeight() / 2 ; | |
int radius = 200 ; | |
//设置画笔的粗细 | |
paint.setStrokeWidth(30); | |
//定义一个区域 | |
RectF rectF = new RectF(x-radius,y-radius,x+radius,y+radius); | |
//画弧 | |
// useCentor true 从中心点开始画 false 中心点不现实 | |
canvas.drawArc(rectF,-90,progress,false,paint); | |
int text = (int) ((float)progress / 360 * 100 ); | |
// measureText 测量字符串的宽度 | |
float textWidth = paint.measureText(text+"%"); | |
Rect rextText = new Rect(); | |
// rextText.height() 获取字符串的高度 | |
paint.getTextBounds(text+"%",0,(text+"%").length(),rextText); | |
paint.setTextSize(30); | |
paint.setStrokeWidth(1); | |
//画文字 | |
canvas.drawText(text+"%",x-textWidth/2,y+rextText.height()/2,paint); | |
} | |
} |
相关文章推荐
- 分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
- 使用Jquery+EasyUI进行框架项目开发案例解说之中的一个---员工管理源代码分享
- 就是一个进度条——C程序设计进度条51%
- 一个基于标准的ASP.NET MVC2.0 + LINQ 的一个项目案例
- 【案例分享】项目施工进度报告 - 树形报表
- android多线程断点下载-带进度条和百分比进度显示
- 决定一个项目进度与质量的关键是什么
- WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例
- WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例
- 3.将maven项目jar纳入maven仓库,Mave项目依赖另外一个Maven项目的案例
- 【案例分享】项目施工进度报告 - 树形报表
- 一个好的产品经理如何把控项目进度和跟进进度
- 一个十年没更新的项目还有没有必要玩
- 培训案例: 一个项目经理的工作日志
- 一个简单的dubbo项目搭建案例
- android 一个应用去获取另一个应用assets下面的资源通过框架代码桥梁------项目实战成功案例
- 批量上传图片(带百分比进度显示)项目源码
- 项目中的一个AOP的编写案例(配置+案例)
- 6.android项目中如何在一个包下面,还有包
- 3.将maven项目jar纳入maven仓库,Mave项目依赖另外一个Maven项目的案例