android 第三方圆弧进度条,Android 圆弧进度条 & 水平进度条 & 水波进度条

先上效果图:

868a7a4668ad

loading.gif

以下代码直接复制即可使用, 碰到类似样式的, 可以根据自己需求修改.

①. 在arrts.xml添加对应属性.

②. 把源码复制过去即可使用.

1. 圆弧进度条 ArcProgressView

868a7a4668ad

ArcProgressView.png

属性:

//中间文字

//文字大小

//文字颜色

//进度条 内层颜色

//进度条 外层颜色

//进度条 内层大小

//进度条 外层大小

//开始角度

//绘制角度,默认360, 例如:180时为一个半圆

使用: 其它View使用方式一样

android:id="@+id/arc_view"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginLeft="200dp"

app:liys_progress_arc_inCircleColor="#EDEDED"

app:liys_progress_arc_textSize="15dp"

app:liys_progress_arc_text="0%"/>

2. 线性进度条 LineTextProgressView

868a7a4668ad

LineTextProgressView.png

属性:

//文字

//文字大小

//文字颜色

//进度条 内层大小

//进度条 外层大小

//进度条 内层颜色

//进度条 外层颜色

3. 水平进度条(带文字) HorzTextProgressView

868a7a4668ad

HorzTextProgressView.png

属性

//文字

//文字大小

//文字颜色

//进度条 内层大小

//进度条 外层大小

//进度条 内层颜色

//进度条 外层颜色

4. 水平进度条(不带文字) HorzProgressView

868a7a4668ad

HorzProgressView.png

属性:

//最大值

//当前进度值

//进度条 外层大小

//进度条 内层颜色

//进度条 外层颜色

//进度条 内层图片(可选)

//进度条 外层图片(可选)

5. 水波 进度条 WaterWaveProView

868a7a4668ad

WaterWaveProView.png

属性:

//中间文字内容

//文字大小

//文字颜色

//内层颜色

//外层颜色

>>>>>>>>>>>>>>>>>>>>>>>>附上源码>>>>>>>>>>>>>>>>>>>>>>>>>>>>

/**

* 圆弧进度条

* @author liys 401654546@qq.com

* @version 1.0 2018/09/12

*/

public class ArcProgressView extends View {

private double mMaxNum = 10000; //最大值

private double mCurrentNum = 0; //当前的值

private String mText = "0%"; //当前 百分比

private int mTextSize; //字体大小

private int mTextColor = 0; //字体颜色

private int mInColor = 0; //内圈颜色

private int mOutColor = 0; //外圈颜色

private int mInCircleSize; //外圈大小 单位sp

private int mOutCircleSize; //内圈大小 单位sp

private int mStartAngle; //开始角度

private int mDrawAngle; //需要绘制的角度

private int mCurrentAngle = 0; //当前角度

private int mWidth; //宽

private int mHeight; //高

int defaultWidth = 100; //默认宽高,单位sp

//画笔

private Paint mTextPaint;

private Paint mInPaint;

private Paint mOutPaint;

public ArcProgressView(Context context) {

this(context, null, 0);

}

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

this(context, attrs, 0);

}

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

super(context, attrs, defStyleAttr);

//默认值

int defaultTextSize = 20; //默认字体大小

int defaultCircleSize = 10; //默认圆弧大小 单位sp

int defaultStartAngle = -90; //默认开始角度

int defaultDrawAngle = 360; //默认绘制角度

String defaultTextColor = "#ABC4DF"; //默认字体颜色

String defaultInColor = "#EDEDED"; //默认内颜色

String defaultOutColor = "#CCBD00"; //默认外颜色

// 获取自定义属性

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

mText = typedArray.getString(R.styleable.ArcProgressView_liys_progress_arc_text);

mTextSize = typedArray.getDimensionPixelSize(R.styleable.ArcProgressView_liys_progress_arc_textSize, sp2px(defaultTextSize));

mStartAngle = typedArray.getInt(R.styleable.ArcProgressView_liys_progress_arc_startAngle, defaultStartAngle);

mDrawAngle = typedArray.getInt(R.styleable.ArcProgressView_liys_progress_arc_drawAngle, defaultDrawAngle);

mTextColor = typedArray.getColor(R.styleable.ArcProgressView_liys_progress_arc_textColor, Color.parseColor(defaultTextColor));

mInColor = typedArray.getColor(R.styleable.ArcProgressView_liys_progress_arc_inCircleColor, Color.parseColor(defaultInColor));

mOutColor = typedArray.getColor(R.styleable.ArcProgressView_liys_progress_arc_outCircleColor, Color.parseColor(defaultOutColor));

mInCircleSize = typedArray.getDimensionPixelSize(R.styleable.ArcProgressView_liys_progress_arc_inCircleSize, sp2px(defaultCircleSize));

mOutCircleSize = typedArray.getDimensionPixelSize(R.styleable.ArcProgressView_liys_progress_arc_outCircleSize, sp2px(defaultCircleSize));

typedArray.recycle();

//设置画笔

mTextPaint = new Paint();

mInPaint = new Paint();

mOutPaint = new Paint();

setTextPaint();

setInPaint();

setOutPaint();

}

/**

* 文字画笔

*/

private void setTextPaint() {

mTextPaint.setColor(mTextColor);

mTextPaint.setAntiAlias(true);

mTextPaint.setTextSize(mTextSize);

}

/**

* 内圆弧画笔

*/

private void setInPaint() {

mInPaint.setColor(mInColor);

mInPaint.setAntiAlias(true);

mInPaint.setStrokeWidth(mInCircleSize); //大小

mInPaint.setStrokeCap(Paint.Cap.ROUND); // 结束位置圆角

mInPaint.setStyle(Paint.Style.STROKE); //空心样式

}

/**

* 外圆弧画笔

*/

private void setOutPaint() {

mOutPaint.setColor(mOutColor);

mOutPaint.setAntiAlias(true);

mOutPaint.setStrokeWidth(mOutCircleSize); //大小

mOutPaint.setStrokeCap(Paint.Cap.ROUND); // 结束位置圆角

mOutPaint.setStyle(Paint.Style.STROKE); //空心样式

}

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

//取默认值

mWidth = sp2px(defaultWidth);

mHeight = sp2px(defaultWidth);

//1. 获取宽

if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY) { //具体值

mWidth = MeasureSpec.getSize(widthMeasureSpec);

}

//2.获取高

if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY) { //具体值

mHeight = MeasureSpec.getSize(heightMeasureSpec);

}

//3. 确定宽高(保持宽高一致)

mWidth = mHeight = (mWidth > mHeight ? mHeight : mWidth);

setMeasuredDimension(mWidth, mHeight);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

drawText(canvas);

drawInCircle(canvas);

drawOutCircle(canvas);

}

//内圆弧

private void drawInCircle(Canvas canvas) {

int r = mInCircleSize / 2; //圆弧的一半

RectF rectF = new RectF(r, r, mWidth - r, mHeight - r);

canvas.drawArc(rectF, mStartAngle, mDrawAngle, false, mInPaint);

}

//内圆弧

private void drawOutCircle(Canvas canvas) {

int r = mOutCircleSize / 2; //圆弧的一半

RectF rectF = new RectF(r, r, mWidth - r, mHeight - r);

if (mCurrentAngle > mDra

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值