自定义View圆形进度条
来源:互联网 发布:java现在还有用吗 编辑:程序博客网 时间:2024/04/28 12:16
package recitewords.apj.com.recitewords.view;/** * Created by Seven on 2016/12/2. */import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.text.TextUtils;import android.util.AttributeSet;import android.view.View;/** * Created by Seven on 2016/12/2. */public class CircleProgressView extends View { private static final String TAG = "CircleProgressBar"; private int mMaxProgress = 100; private int mProgress = 0; private final int mCircleLineStrokeWidth = 8; private final int mTxtStrokeWidth = 2; // 画圆所在的距形区域 private final RectF mRectF; private final Paint mPaint; private final Context mContext; private String mTxtHint1; private String mTxtHint2; public CircleProgressView(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; mRectF = new RectF(); mPaint = new Paint(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int width = this.getWidth(); int height = this.getHeight(); if (width != height) { int min = Math.min(width, height); width = min; height = min; } // 设置画笔相关属性 mPaint.setAntiAlias(true); mPaint.setColor(Color.rgb(0xe9, 0xe9, 0xe9)); canvas.drawColor(Color.TRANSPARENT); mPaint.setStrokeWidth(mCircleLineStrokeWidth); mPaint.setStyle(Paint.Style.STROKE); // 位置 mRectF.left = mCircleLineStrokeWidth / 2; // 左上角x mRectF.top = mCircleLineStrokeWidth / 2; // 左上角y mRectF.right = width - mCircleLineStrokeWidth / 2; // 左下角x mRectF.bottom = height - mCircleLineStrokeWidth / 2; // 右下角y // 绘制圆圈,进度条背景 canvas.drawArc(mRectF, -90, 360, false, mPaint); mPaint.setColor(Color.rgb(0xf8, 0x60, 0x30)); canvas.drawArc(mRectF, -90, ((float) mProgress / mMaxProgress) * 360, false, mPaint); // 绘制进度文案显示 mPaint.setStrokeWidth(mTxtStrokeWidth); String text = mProgress + "%"; int textHeight = height / 4; mPaint.setTextSize(textHeight); int textWidth = (int) mPaint.measureText(text, 0, text.length()); mPaint.setStyle(Paint.Style.FILL); canvas.drawText(text, width / 2 - textWidth / 2, height / 2 + textHeight / 2, mPaint); if (!TextUtils.isEmpty(mTxtHint1)) { mPaint.setStrokeWidth(mTxtStrokeWidth); text = mTxtHint1; textHeight = height / 8; mPaint.setTextSize(textHeight); mPaint.setColor(Color.rgb(0x99, 0x99, 0x99)); textWidth = (int) mPaint.measureText(text, 0, text.length()); mPaint.setStyle(Paint.Style.FILL); canvas.drawText(text, width / 2 - textWidth / 2, height / 4 + textHeight / 2, mPaint); } if (!TextUtils.isEmpty(mTxtHint2)) { mPaint.setStrokeWidth(mTxtStrokeWidth); text = mTxtHint2; textHeight = height / 8; mPaint.setTextSize(textHeight); textWidth = (int) mPaint.measureText(text, 0, text.length()); mPaint.setStyle(Paint.Style.FILL); canvas.drawText(text, width / 2 - textWidth / 2, 3 * height / 4 + textHeight / 2, mPaint); } } public int getMaxProgress() { return mMaxProgress; } public void setMaxProgress(int maxProgress) { this.mMaxProgress = maxProgress; } public void setProgress(int progress) { this.mProgress = progress; this.invalidate(); } public void setProgressNotInUiThread(int progress) { this.mProgress = progress; this.postInvalidate(); } public String getmTxtHint1() { return mTxtHint1; } public void setmTxtHint1(String mTxtHint1) { this.mTxtHint1 = mTxtHint1; } public String getmTxtHint2() { return mTxtHint2; } public void setmTxtHint2(String mTxtHint2) { this.mTxtHint2 = mTxtHint2; }}
以上是自定义View的源码。
在布局文件的引用如下:
<recitewords.apj.com.recitewords.view.CircleProgressView android:id="@+id/review_progress" android:layout_width="80dp" android:layout_height="80dp" android:layout_gravity="center">
在Activity设置进度:
holder.progress.setProgress(25);
可用Handler来动态设置进度。
0 0
- 自定义View圆形进度条
- 自定义view圆形进度条。
- 自定义View圆形进度条
- 自定义view圆形进度条
- 自定义view进度条圆形
- 自定义view 圆形进度条
- 自定义View 圆形进度条
- 自定义view 圆形进度条
- 自定义View画圆形进度条
- android 圆形进度条 自定义view
- 自定义view之一-----圆形进度条
- 自定义View实现圆形进度条
- android 自定义view 圆形进度条
- 自定义view之圆形进度条
- Android自定义View---圆形进度条
- 自定义View绘制圆形进度条
- 自定义View实现圆形进度条
- 自定义view之圆形进度条
- 【机房合作】——C#如何获取当前时间和日期
- 二〇一六
- c++从文本文件读取字符串
- 在VSphere web client中从cluster移除ESXi主机
- MFC工程使用printf()
- 自定义View圆形进度条
- andrid http/https等网络传输所涉及到的知识体系大汇总
- 暴风魔镜VR(第一人称和第三人称)
- 什么是uml,统一建模语言
- 如何判断安装的Linux是redhat还是suse
- 跑马灯的实现
- 【基础】求商运算的坑
- 数据挖掘:id3 算法
- 这些工具你会用吗?常见设计工具视频教程集锦