Android
来源:互联网 发布:社交网络强弱关系 编辑:程序博客网 时间:2024/06/05 15:22
效果图:
这里引用了网络的一个图,实际下面代码是去掉了边框,增加了灰色背景色。
原理:
- 新建一个画布
- 先画一个灰色矩形背景
- 然后根据设置的进度值,画对应进度值的蓝色背景
- 然后画中间文字值
代码:
布局xml:
<com.xinyan.personal.ui.view.AuthDotArcProgressBar android:id="@+id/dot_progress" android:layout_width="300dp" android:layout_height="300dp" android:layout_gravity="center_horizontal"/>
自定义布局View代码:package com.xinyan.personal.ui.view;import android.content.Context;import android.content.res.Resources;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.graphics.RectF;import android.text.TextUtils;import android.util.AttributeSet;import android.util.DisplayMetrics;import android.view.View;import android.view.WindowManager;import com.xinyan.personal.R;/** * Created by zst on 17/7/18. */public class VerticalProgressBar extends View { private Paint paint;// 画笔 private int progress;// 进度值 private int width;// 宽度值 private int height;// 高度值 public VerticalProgressBar(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public VerticalProgressBar(Context context, AttributeSet attrs) { super(context, attrs); init(); } public VerticalProgressBar(Context context) { super(context); init(); } private void init() { paint = new Paint(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //画布的高度和宽度 width = getMeasuredWidth() - 1;// 得到布局设置的宽度值 height = getMeasuredHeight() - 1;// 得到布局设置的高度值 } @Override protected void onDraw(Canvas canvas) { //画背景 paint.setColor(getResources().getColor(R.color.line_e6e6e6));// 设置背景画笔颜色 canvas.drawRect(0, 0, width, height, paint);// 画背景矩形 //画进度 paint.setColor(getResources().getColor(R.color.line_feae1b));// 设置进度画笔颜色 canvas.drawRect(0, height - progress / 100f * height, width, height, paint);// 画矩形 //画四边 //canvas.drawLine(0, 0, width, 0, paint);// 画顶边 //canvas.drawLine(0, 0, 0, height, paint);// 画左边 //canvas.drawLine(width, 0, width, height, paint);// 画右边 //canvas.drawLine(0, height, width, height, paint);// 画底边 //设置中间字体 //paint.setColor(Color.RED);// 设置画笔颜色为红色 //paint.setTextSize(width / 3);// 设置文字大小 //canvas.drawText(progress + "%",(width - getTextWidth(progress + "%")) / 2, height / 2, paint);// 画文字 super.onDraw(canvas); } /** * 拿到文字宽度 * * @param str 传进来的字符串 * return 宽度 */ private int getTextWidth(String str) { // 计算文字所在矩形,可以得到宽高 Rect rect = new Rect(); paint.getTextBounds(str, 0, str.length(), rect); return rect.width(); } /** * 设置progressbar进度 */ public void setProgress(int progress) { this.progress = progress; postInvalidate(); }}
调用代码:VerticalProgressBar vpProgressBar = (VerticalProgressBar) findViewById(R.id.vp_progress); new Thread(){ public void run() { try { for (int i= 0;i<=100;i++) { Thread.sleep(50);//休息50毫秒 vpProgressBar.setProgress(i);//更新进度条进度 } } catch (InterruptedException e) { e.printStackTrace(); } }; }.start();
DrawRect()参数解析
drawRect(float left, float top, float right, float bottom, Paint paint)
解释:X轴为手机顶部,y轴为手机左边,各个参数的意思就是到这两边的距离(画布的两边)
阅读全文
0 0
- Android
- android
- Android
- android
- android
- Android
- Android
- android
- android
- android
- Android
- Android
- android!!!
- android
- android
- android
- android
- android:
- 关于Xps9560 powershare(关机充电)问题
- springMVC中的@PathVariable
- org.apache.hadoop.mapreduce.task.reduce.Shuffle error in shuffle in fetcher
- IT 行业加班到底有没有价值?
- 使用Spring 3的@value简化配置文件的读取
- Android
- 算法总结——八皇后问题(三种解法)
- LINUX中错误 SELinux is disabled
- C++ 一个例子说明.c_str()函数
- linux中创建图片服务器减轻传统服务器的压力
- 学习Nginx之理解正向代理和反向代理
- USB描述符
- Android中 字符串、byte数组、十六进制串、ASCII之间的相互转化
- 多线程下单例模式:懒加载(延迟加载)和即时加载