您的位置:首页 > 移动开发 > Android开发

Android自定义控件之圆形进度条ImageView

2014-12-01 15:43 417 查看
自己开发的一个圆形有百分比显示的进度条,代码如下:

package com.wangran.beautiful_girl_show.view;

import com.wangran.beautiful_girl_show.view.photoview.PhotoView;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.util.AttributeSet;

/**
* 可显示进度的ImageView
* @author 夏小川
*/
public class ProgressImageView extends ImageView {
private static final String TAG = "ProgressImageView";
private Context mContext;
public static final int FONT_SIZE = 14;
public static final int ROUND_WIDTH = 50;
public static final int STROKE_WIDTH = 7;
private int mFontSize;
private int mRoundWidth;
private int mStrokeWidth;
private Paint mPaint;
private boolean mShowProgress;
private int mProgress;
private float mTextY;
private int mCenterX;
private int mCenterY;
private int mRadius;
private RectF mOval;

public ProgressImageView(Context context) {
super(context);
mContext = context;
}

public ProgressImageView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
}

private void init() {
float scale = mContext.getResources().getDisplayMetrics().density;

mFontSize = (int) (FONT_SIZE * scale);
mRoundWidth = (int) (ROUND_WIDTH * scale);
mStrokeWidth = (int) (STROKE_WIDTH * scale);

mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setTextSize(mFontSize);

mCenterX = getWidth() / 2;
mCenterY = getHeight() / 2;
mRadius = mRoundWidth / 2;

mTextY = mCenterY + mFontSize * 11.0f / 28;

mOval = new RectF(mCenterX - mRadius, mCenterY - mRadius, mCenterX
+ mRadius, mCenterY + mRadius);
}

public void onDraw(Canvas canvas) {
if (mShowProgress) {
if (mCenterX == 0 || mCenterY == 0) {
init();
}
// 画最外层的大圆环
mPaint.setColor(Color.DKGRAY);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeWidth(mStrokeWidth);
canvas.drawCircle(mCenterX, mCenterY, mRadius, mPaint);

// 画进度百分比
mPaint.setStrokeWidth(0);
mPaint.setColor(Color.WHITE);
mPaint.setTypeface(Typeface.MONOSPACE);
mPaint.setTextAlign(Paint.Align.CENTER);
String progressStr = mProgress + "%";
canvas.drawText(progressStr, mCenterX, mTextY, mPaint);

// 画圆环的进度
mPaint.setStrokeWidth(mStrokeWidth);
mPaint.setColor(Color.WHITE);
canvas.drawArc(mOval, 0, 360 * mProgress / 100, false, mPaint);
} else {
super.onDraw(canvas);
}
}

public void startProgress() {
mShowProgress = true;
setProgress(0);
}

public void setProgress(int progress) {
if (mShowProgress) {
mProgress = progress;
invalidate();
}
}

public void closeProgress() {
mShowProgress = false;
}
}


下面是效果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐