当前位置:   article > 正文

Android 自定义View实现圆形加载进度条_android 半圆形进度条

android 半圆形进度条

效果图

话不多说,咱们直接看代码

首先第一种:

1、创建自定义View

  1. public class MyRelative extends View {
  2. public MyRelative(Context context) {
  3. this(context, null); //手动改成this...
  4. }
  5. public MyRelative(Context context, @Nullable AttributeSet attrs) {
  6. this(context, attrs, 0);//手动改成this...
  7. }
  8. @SuppressLint("ResourceAsColor")
  9. public MyRelative(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  10. super(context, attrs, defStyleAttr);
  11. }
  12. }

2、自定义属性,(在values文件夹下创建一个XML,取名为atts_circle_view.xml)

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3. <declare-styleable name="MyRelative"> //这个name最好和你创建的自定义View类名一样
  4. <!--外圆颜色-->
  5. <attr name="outer_color" format="color" />
  6. <!--内圆颜色-->
  7. <attr name="inner_color" format="color" />
  8. <!--圆形宽度-->
  9. <attr name="border_width" format="dimension" />
  10. <!--字体颜色-->
  11. <attr name="step_text_color" format="color" />
  12. <!--字体大小-->
  13. <attr name="step_text_size" format="dimension" />
  14. <!--步数最大值-->
  15. <attr name="max_step" format="integer"/>
  16. <!--当前步数-->
  17. <attr name="curren_step" format="integer"/>
  18. </declare-styleable>
  19. </resources>

3、在第三个构造方法中得到自定义属性

  1. @SuppressLint("ResourceAsColor")
  2. public MyRelative(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  3. super(context, attrs, defStyleAttr);
  4. TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyRelative);
  5. //圆弧宽度
  6. mBorderWidth = (int) typedArray.getDimension(R.styleable.MyRelative_border_width, 10);
  7. //外圆弧颜色
  8. mOuterColor = typedArray.getColor(R.styleable.MyRelative_outer_color, mOuterColor);
  9. //内圆弧颜色
  10. mInnerColor = typedArray.getInteger(R.styleable.MyRelative_inner_color, mInnerColor);
  11. //字体颜色
  12. mTextColor = typedArray.getColor(R.styleable.MyRelative_step_text_color, mTextColor);
  13. //字体大小
  14. mTextSize = (int) typedArray.getDimensionPixelSize(R.styleable.MyRelative_step_text_size, mTextSize);
  15. //最大步数
  16. mMaxStep = typedArray.getInteger(R.styleable.MyRelative_max_step, 10000);
  17. //当前步数
  18. mCurrentStep = typedArray.getInteger(R.styleable.MyRelative_curren_step, 8000);
  19. typedArray.recycle();
  20. }

4、重写onMeasure方法(测量view大小)

  1. @Override
  2. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  3. super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  4. //测量宽高
  5. int width = MeasureSpec.getSize(widthMeasureSpec);
  6. int height = MeasureSpec.getSize(heightMeasureSpec);
  7. //将控件截成正方形
  8. //三目运算符取长度短的一边作为宽高
  9. setMeasuredDimension(width > height ? height : width, width > height ? height : width);
  10. }

5、重写onDraw方法(绘制)

  1. @Override
  2. protected void onDraw(Canvas canvas) {
  3. super.onDraw(canvas);
  4. //绘制内圆弧
  5. int center = getWidth() / 2;
  6. int r = (getWidth() - mBorderWidth) / 2;
  7. RectF rectF = new RectF(mBorderWidth / 2, mBorderWidth / 2, center + r, center + r);
  8. canvas.drawArc(rectF, 135, 270, false, mInnerPaint);
  9. //绘制外圆弧
  10. if (mMaxStep == 0) {
  11. return;
  12. }
  13. float radio = (float) mCurrentStep / mMaxStep;
  14. canvas.drawArc(rectF, 135, 270 * radio, false, mOuterPaint);
  15. //文字
  16. String mText = mCurrentS
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/474166
推荐阅读
相关标签
  

闽ICP备14008679号