Android实现圆形渐变加载进度条

Android实现圆形渐变加载进度条,第1张

概述Android实现圆形渐变加载进度条 最近设计要求要一个圆形进度条渐变的需求: 1.画圆形进度条 2.解决渐变 最终实现效果代码 package com.view; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graph

最近设计要求要一个圆形进度条渐变的需求:

1.画圆形进度条

2.解决渐变

最终实现效果代码

package com.vIEw;import androID.content.Context;import androID.content.res.TypedArray;import androID.graphics.Canvas;import androID.graphics.color;import androID.graphics.Matrix;import androID.graphics.Paint;import androID.graphics.RectF;import androID.graphics.SweepGradIEnt;import androID.util.AttributeSet;import androID.vIEw.VIEw;import com.fx.R;public class CompletedVIEw extends VIEw {  // 画实心圆的画笔  private Paint mCirclePaint;  // 画圆环的画笔  private Paint mRingPaint;  // 画圆环的画笔背景色  private Paint mRingPaintBg;  // 画字体的画笔  private Paint mTextPaint;  // 圆形颜色  private int mCirclecolor;  // 圆环颜色  private int mRingcolor;  // 圆环背景颜色  private int mRingBgcolor;  // 半径  private float mRadius;  // 圆环半径  private float mRingRadius;  // 圆环宽度  private float mstrokeWIDth;  // 圆心x坐标  private int mXCenter;  // 圆心y坐标  private int mYCenter;  // 字的长度  private float mTxtWIDth;  // 字的高度  private float mTxtHeight;  // 总进度  private int mTotalProgress = 100;  // 当前进度  private int mProgress;  private String string;  public CompletedVIEw(Context context,AttributeSet attrs) {    super(context,attrs);    // 获取自定义的属性    initAttrs(context,attrs);    initvariable();  }  //属性  private voID initAttrs(Context context,AttributeSet attrs) {    TypedArray typeArray = context.gettheme().obtainStyledAttributes(attrs,R.styleable.TasksCompletedVIEw,0);    mRadius = typeArray.getDimension(R.styleable.TasksCompletedVIEw_radius,80);    mstrokeWIDth = typeArray.getDimension(R.styleable.TasksCompletedVIEw_strokeWIDth,10);    mCirclecolor = typeArray.getcolor(R.styleable.TasksCompletedVIEw_circlecolor,0xFFFFFFFF);    mRingcolor = typeArray.getcolor(R.styleable.TasksCompletedVIEw_ringcolor,0xFFFFFFFF);    mRingBgcolor = typeArray.getcolor(R.styleable.TasksCompletedVIEw_ringBgcolor,0xFFFFFFFF);    mRingRadius = mRadius + mstrokeWIDth / 2;  }  RectF oval;  //初始化画笔  private voID initvariable() {    oval = new RectF();    //内圆    mCirclePaint = new Paint();    mCirclePaint.setAntiAlias(true);    mCirclePaint.setcolor(mCirclecolor);    mCirclePaint.setStyle(Paint.Style.FILL);    mCirclePaint.setstrokeCap(Paint.Cap.ROUND);    //外圆弧背景    mRingPaintBg = new Paint();    mRingPaintBg.setAntiAlias(true);    mRingPaintBg.setcolor(mRingBgcolor);    mRingPaintBg.setStyle(Paint.Style.stroke);    mRingPaintBg.setstrokeWIDth(mstrokeWIDth);    //外圆弧    mRingPaint = new Paint();    mRingPaint.setAntiAlias(true);//    mRingPaint.setcolor(mRingcolor);    mRingPaint.setStyle(Paint.Style.stroke);    mRingPaint.setstrokeWIDth(mstrokeWIDth);    mRingPaint.setstrokeCap(Paint.Cap.ROUND);//设置线冒样式,有圆 有方    //中间字    mTextPaint = new Paint();    mTextPaint.setAntiAlias(true);    mTextPaint.setStyle(Paint.Style.FILL);    mTextPaint.setcolor(mRingcolor);    mTextPaint.setTextSize(mRadius / 2);    Paint.FontMetrics fm = mTextPaint.getFontMetrics();    mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent);  }  SweepGradIEnt sweepGradIEnt;  //画图  @OverrIDe  protected voID onDraw(Canvas canvas) {    mXCenter = getWIDth() / 2;    mYCenter = getHeight() / 2;    //内圆    canvas.drawCircle(mXCenter,mYCenter,mRadius,mCirclePaint);    //外圆弧背景    RectF oval1 = new RectF();    oval1.left = (mXCenter - mRingRadius);    oval1.top = (mYCenter - mRingRadius);    oval1.right = mRingRadius * 2 + (mXCenter - mRingRadius);    oval1.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);    canvas.drawArc(oval1,360,false,mRingPaintBg); //圆弧所在的椭圆对象、圆弧的起始角度、圆弧的角度、是否显示半径连线    //外圆弧    if (mProgress > 0 ) {      oval.left = (mXCenter - mRingRadius);      oval.top = (mYCenter - mRingRadius);      oval.right = mRingRadius * 2 + (mXCenter - mRingRadius);      oval.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);      if (sweepGradIEnt==null) {        int[] arccolors= new int[]{mRingcolor,color.parsecolor("#b05e39"),mRingcolor};        float[] arcPostion=new float[]{0.0f,0.5f,0.95f};//        sweepGradIEnt = new SweepGradIEnt(mXCenter,mRingcolor,color.parsecolor("#b05e39"));        sweepGradIEnt = new SweepGradIEnt(mXCenter,arccolors,arcPostion);        Matrix matrix = new Matrix();        matrix.setRotate(-90,mXCenter,mYCenter);        sweepGradIEnt.setLocalMatrix(matrix);        mRingPaint.setShader(sweepGradIEnt);      }      canvas.drawArc(oval,-90,((float)mProgress / mTotalProgress) * 360,mRingPaint); //      //字体      String txt = mProgress + "%";      mTxtWIDth = mTextPaint.measureText(txt,txt.length());      canvas.drawText(txt,mXCenter - mTxtWIDth / 2,mYCenter + mTxtHeight / 4,mTextPaint);    }  }  public voID setText(String string){  }  //设置进度  public voID setProgress(int progress) {    mProgress = progress;    postInvalIDate();//重绘  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

总结

以上是内存溢出为你收集整理的Android实现圆形渐变加载进度条全部内容,希望文章能够帮你解决Android实现圆形渐变加载进度条所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1145730.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存