Android动态自定义圆形进度条

作者:mrr 时间:2022-07-21 21:29:50 

效果图:

Android动态自定义圆形进度条

A.绘制圆环,圆弧,文本


//1.画圆环
//原点坐标
float circleX = width / 2;
float circleY = width / 2;
//半径
float radius = width / 2 - roundWidth / 2;
//设置画笔的属性
paint.setColor(roundColor);
paint.setStrokeWidth(roundWidth);
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(circleX, circleY, radius, paint);
//2.画圆弧
RectF oval = new RectF(roundWidth/2,roundWidth/2,width-roundWidth/2,width - roundWidth/2);
paint.setColor(roundProgressColor);
canvas.drawArc(oval, 0, progress * 360 / max, false, paint);
//3.画文本
paint.setTextSize(textSize);
paint.setColor(textColor);
paint.setStrokeWidth(0);
String text = progress * 100 / max + "%";
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
canvas.drawText(text, width / 2 - bounds.width() / 2, width / 2 + bounds.height() / 2, paint);

B.自定义属性的具体步骤

具体步骤:

1. 定义属性: 在values目录下创建attrs.xml


<declare-styleable name="RoundProgress">
<attr name="roundColor" format="color"></attr>
<attr name="roundProgressColor" format="color"></attr>
<attr name="textColor" format="color"></attr>
<attr name="roundWidth" format="dimension"></attr>
<attr name="textSize" format="dimension"></attr>
</declare-styleable>

2. 在布局文件中引用当前应用的名称空间


xmlns:atguigu=http://schemas.android.com/apk/res-auto

3. 在自定义视图标签中使用自定义属性


<com.atguigu.p2p.util.RoundProgress
 android:id="@+id/rp_home_progress"
 android:layout_width="120dp"
 android:layout_height="120dp"
 android:layout_gravity="center_horizontal"
 android:layout_marginTop="20dp"
 atguigu:roundColor="@android:color/darker_gray         <br>  atguigu:roundProgressColor="@android:color/holo_red_dark"
 atguigu:textColor="@color/text_progress"
 atguigu:roundWidth="10dp"
 atguigu:textSize="20sp"
 />

4. 在自定义View类的构造方法中, 取出布局中的自定义属性值


//1.得到所有自定义属性的数组
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RoundProgress);
//2.获取自定义属性的值, 如果没有指定取默认值
roundColor = typedArray.getColor(R.styleable.RoundProgress_roundColor, Color.RED);
roundProgressColor = typedArray.getColor(R.styleable.RoundProgress_roundProgressColor, Color.GREEN);
textColor = typedArray.getColor(R.styleable.RoundProgress_textColor, Color.GREEN);
roundWidth = typedArray.getDimension(R.styleable.RoundProgress_roundWidth, UIUtils.dp2px(10));
textSize = typedArray.getDimension(R.styleable.RoundProgress_textSize, UIUtils.dp2px(20));
//3.释放资源数据
typedArray.recycle();

C.让圆环进度"动起来"

1.自定义RoundProgress类中提供进度属性的getter和setter方法

2.在HomeFragment的onSuccess()中:

 github:https://github.com/ganchuanpu/P2PInvest

以上所述是小编给大家介绍的Android动态自定义圆形进度条网站的支持!

标签:android,圆形,进度条
0
投稿

猜你喜欢

  • Android 7.0行为变更 FileUriExposedException解决方法

    2023-07-28 01:38:29
  • 使用C#发送Http请求实现模拟登陆实例

    2023-06-22 22:25:07
  • Android实现点击获取验证码倒计时效果

    2022-08-29 09:23:41
  • C# WinForm-Timer控件的使用

    2023-11-20 06:54:00
  • Android实现按钮点击效果

    2021-06-10 10:05:54
  • Android动画 实现开关按钮动画(属性动画之平移动画)实例代码

    2023-01-02 23:06:30
  • SpringCloud服务网关Gateway的使用教程详解

    2021-05-29 20:53:39
  • Java Web程序实现返回JSON字符串的方法总结

    2023-07-28 22:46:48
  • 详解Java中ArrayList类

    2021-10-25 21:42:33
  • Java 数据结构与算法系列精讲之贪心算法

    2023-09-12 17:56:13
  • Android App调试内存泄露之Cursor篇

    2023-11-22 03:36:29
  • 详解Android开发数据持久化之文件存储(附源码)

    2022-06-19 20:30:33
  • Java使用设计模式中的工厂方法模式实例解析

    2021-12-07 03:57:49
  • C/C++中比较字符串的方法详解

    2023-03-22 18:55:40
  • Java对象转json JsonFormat注解

    2022-08-27 00:44:09
  • Android开发实现读取Assets下文件及文件写入存储卡的方法

    2023-02-07 15:42:21
  • C#自定义针对URL地址的处理类实例

    2022-09-12 16:54:02
  • Jmeter环境搭建及安装步骤

    2021-11-03 21:06:10
  • 关于Android HTML5 audio autoplay无效问题的解决方案

    2021-09-22 04:10:30
  • Android沉浸式状态栏实现

    2022-11-23 12:08:12
  • asp之家 软件编程 m.aspxhome.com