美文网首页
自定义View(圆形进度条)

自定义View(圆形进度条)

作者: 撩人的风光 | 来源:发表于2020-03-17 13:54 被阅读0次

/**

* Created by dell

* on 2020/3/17

* The package is com.video.universalplayer

* This Class is ...

*/

public class CircleProgressbarextends View {

private PaintmCirclePaint;

private PaintmTextPaint;

private PaintmArcPaint;

private float mPercentProgress;

private int mInnerColor;

private int mOutColor;

private int mInnerCircleWidth;

private int mOutCircleWidth;

private Stringtext ="下载";

public CircleProgressbar(Context context) {

this(context,null);

}

public CircleProgressbar(Context context,@Nullable AttributeSet attrs) {

this(context, attrs,0);

}

public CircleProgressbar(Context context,@Nullable AttributeSet attrs,int defStyleAttr) {

super(context, attrs, defStyleAttr);

TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CircleProgressbar);

mInnerColor = typedArray.getColor(R.styleable.CircleProgressbar_innerCircleColor, ContextCompat.getColor(getContext(), R.color.colorPrimary));

mOutColor = typedArray.getColor(R.styleable.CircleProgressbar_outCircleColor, ContextCompat.getColor(getContext(), R.color.colorAccent));

mInnerCircleWidth = (int) typedArray.getDimension(R.styleable.CircleProgressbar_innerCircleWidth, DensityUtil.dip2px(getContext(),2));

mOutCircleWidth = (int) typedArray.getDimension(R.styleable.CircleProgressbar_innerCircleWidth, DensityUtil.dip2px(getContext(),2));

typedArray.recycle();

initPaint();

}

private void initPaint() {

mCirclePaint =new Paint();

mCirclePaint.setAntiAlias(true);

mCirclePaint.setColor(mInnerColor);

mCirclePaint.setStrokeWidth(mInnerCircleWidth);

mCirclePaint.setStyle(Paint.Style.STROKE);

mTextPaint =new TextPaint();

mTextPaint.setAntiAlias(true);

mTextPaint.setTextSize(DensityUtil.dip2px(getContext(),12));

mArcPaint =new Paint();

mArcPaint.setAntiAlias(true);

mArcPaint.setColor(mOutColor);

mArcPaint.setStrokeWidth(mOutCircleWidth);

mArcPaint.setStyle(Paint.Style.STROKE);

}

@Override

    protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

int width = MeasureSpec.getSize(widthMeasureSpec);

int height = MeasureSpec.getSize(heightMeasureSpec);

setMeasuredDimension(width > height ? height : width, width > height ? height : width);

}

@Override

    protected void onDraw(Canvas canvas) {

drawCircle(canvas);

drawText(canvas);

drawArc(canvas);

}

/**

* 画圆

*

    * @param canvas

    */

    private void drawCircle(Canvas canvas) {

float cx = getWidth() >>1;

float cy = getHeight() >>1;

canvas.drawCircle(cx, cy, (getWidth() -mOutCircleWidth) >>1,mCirclePaint);

}

/**

* 画文字

*

    * @param canvas

    */

    private void drawText(Canvas canvas) {

Rect textBounds =new Rect();

mTextPaint.getTextBounds(text,0,text.length(), textBounds);

int dx = getWidth() /2 - textBounds.width() /2;

Paint.FontMetricsInt fontMetrics =mTextPaint.getFontMetricsInt();

int dy = (fontMetrics.bottom - fontMetrics.top) /2 - fontMetrics.bottom;

int baseLine = getHeight() /2 + dy;

canvas.drawText(text, dx, baseLine,mTextPaint);

}

/**

* 画进度

*

    * @param canvas

    */

    private void drawArc(Canvas canvas) {

RectF rectF =new RectF(mOutCircleWidth >>1,mOutCircleWidth >>1,

getWidth() - (mOutCircleWidth >>1), getHeight() - (mOutCircleWidth >>1));

float sweepAngle =mPercentProgress *360;

canvas.drawArc(rectF,0, sweepAngle,false,mArcPaint);

}

public synchronized void setCurrentProgress(float currentProgress) {

this.mPercentProgress = currentProgress;

if (mPercentProgress >0) {

text = (int) (mPercentProgress *100) +"%";

}

invalidate();

}

public synchronized void setText(String text) {

this.text = text;

invalidate();

}

public synchronized String getText() {

return text;

}

}

相关文章

  • Android-自定义进度条

    ProgressBar 参考文章:Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)and...

  • iOS 制作个圆形进度条

    1.需要做个这样的圆形进度条 自定义弹窗view就不说了,主要是这个圆形进度view,底色是灰色然后有进度灰色被...

  • Android 自定义圆形进度条

    Android简易的圆形进度条 自定义View基础入门看2个系列文章,非常优秀的文章。安卓自定义View教程目录H...

  • Android常用控件之ProgressBar,圆形进度条

    目录:android.widget.ProgressBar 前言:中间带百分比的圆形进度条xml布局 自定义view:

  • Android圆形进度条自定义

    自定义圆形进度条 实现 圆形进度条api 使用 将MyCircleProgressView和attrs.xml下的...

  • android 圆形进度条

    圆形的进度条,自定义控件实现

  • 自定义View实战四:圆形进度条

    本文介绍自定义圆形进度条的实现,主要利用自定义 View 和动画相关知识。 下面是效果图 实现步骤分析准备好外层圆...

  • ProgressBar

    普通进度条 样式 圆形和水平【默认圆形】 自定义水平进度条 在这个Style中,有一个progressDrawab...

  • 自定义View 圆形进度条

    目录 效果 按照惯例,放上效果图 前言 上一篇 文章把断点续传的功能分享了一下,有兴趣的朋友可以看一看。接下来就给...

  • 自定义View 圆形进度条

    别的不多说,直接上代码 创建自定义类 CustomProgress 继承 View CustomProgress类...

网友评论

      本文标题:自定义View(圆形进度条)

      本文链接:https://www.haomeiwen.com/subject/txltyhtx.html