android弧形进度条,有详细注释的,比较简单

|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
|
package com.demo.eric.views;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.Style;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;/** * 弧形进度条 * * @author Eric * */public class ArcProgressbar extends View { public ArcProgressbar(Context context) { super(context); } public ArcProgressbar(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); init(canvas); } private void init(Canvas canvas) { // 画弧形的矩阵区域。 rectBg = new RectF(15, 15, diameter, diameter); // 计算弧形的圆心和半径。 int cx1 = (diameter + 15) / 2; int cy1 = (diameter + 15) / 2; int arcRadius = (diameter - 15) / 2; // ProgressBar结尾和开始画2个圆,实现ProgressBar的圆角。 mPaintCircle = new Paint(); mPaintCircle.setAntiAlias(true); mPaintCircle.setColor(bgColor); canvas.drawCircle( (float) (cx1 + arcRadius * Math.cos(startAngle * 3.14 / 180)), (float) (cy1 + arcRadius * Math.sin(startAngle * 3.14 / 180)), bgStrokeWidth / 2, mPaintCircle);// 小圆 canvas.drawCircle( (float) (cx1 + arcRadius * Math.cos((180 - startAngle) * 3.14 / 180)), (float) (cy1 + arcRadius * Math.sin((180 - startAngle) * 3.14 / 180)), bgStrokeWidth / 2, mPaintCircle);// 小圆 // 弧形背景。 mPaintBg = new Paint(); mPaintBg.setAntiAlias(true); mPaintBg.setStyle(Style.STROKE); mPaintBg.setStrokeWidth(bgStrokeWidth); mPaintBg.setColor(bgColor); canvas.drawArc(rectBg, startAngle, endAngle, false, mPaintBg); // 弧形小背景。 if (showSmallBg) { mPaintSmallBg = new Paint(); mPaintSmallBg.setAntiAlias(true); mPaintSmallBg.setStyle(Style.STROKE); mPaintSmallBg.setStrokeWidth(barStrokeWidth); mPaintSmallBg.setColor(smallBgColor); canvas.drawArc(rectBg, startAngle, endAngle, false, mPaintSmallBg); } // 弧形ProgressBar。 mPaintBar = new Paint(); mPaintBar.setAntiAlias(true); mPaintBar.setStyle(Style.STROKE); mPaintBar.setStrokeWidth(barStrokeWidth); mPaintBar.setColor(barColor); canvas.drawArc(rectBg, startAngle, progress, false, mPaintBar); // 随ProgressBar移动的圆。 if (showMoveCircle) { mPaintCircle.setColor(barColor); canvas.drawCircle( (float) (cx1 + arcRadius * Math.cos(angleOfMoveCircle * 3.14 / 180)), (float) (cy1 + arcRadius * Math.sin(angleOfMoveCircle * 3.14 / 180)), bgStrokeWidth / 2, mPaintCircle);// 小圆 } invalidate(); } /** * * @param progress */ public void addProgress(int _progress) { progress += _progress; angleOfMoveCircle += _progress; System.out.println(progress); if (progress > endAngle) { progress = 0; angleOfMoveCircle = startAngle; } invalidate(); } /** * 设置弧形背景的画笔宽度。 */ public void setBgStrokeWidth(int bgStrokeWidth) { this.bgStrokeWidth = bgStrokeWidth; } /** * 设置弧形ProgressBar的画笔宽度。 */ public void setBarStrokeWidth(int barStrokeWidth) { this.barStrokeWidth = barStrokeWidth; } /** * 设置弧形背景的颜色。 */ public void setBgColor(int bgColor) { this.bgColor = bgColor; } /** * 设置弧形ProgressBar的颜色。 */ public void setBarColor(int barColor) { this.barColor = barColor; } /** * 设置弧形小背景的颜色。 */ public void setSmallBgColor(int smallBgColor) { this.smallBgColor = smallBgColor; } /** * 设置弧形的直径。 */ public void setDiameter(int diameter) { this.diameter = diameter; } /** * 是否显示小背景。 */ public void setShowSmallBg(boolean showSmallBg) { this.showSmallBg = showSmallBg; } /** * 是否显示移动的小圆。 */ public void setShowMoveCircle(boolean showMoveCircle) { this.showMoveCircle = showMoveCircle; } private int bgStrokeWidth = 44; private int barStrokeWidth = 15; private int bgColor = Color.GRAY; private int barColor = Color.RED; private int smallBgColor = Color.WHITE; private int progress = 0; private int angleOfMoveCircle = 140;// 移动小园的起始角度。 private int startAngle = 140; private int endAngle = 260; private Paint mPaintBar = null; private Paint mPaintSmallBg = null; private Paint mPaintBg = null; private Paint mPaintCircle = null; private RectF rectBg = null; /** * 直徑。 */ private int diameter = 450; private boolean showSmallBg = true;// 是否显示小背景。 private boolean showMoveCircle = true;// 是否显示移动的小园。} |
android弧形进度条,有详细注释的,比较简单的更多相关文章
- android多线程进度条
多线程实现更新android进度条. 实例教程,详细信息我已经注释 android多线程进度条 01package com.shougao.hello; 02 03import android ...
- 用layer-list实现弧形进度条
本文转载自:http://www.linuxidc.com/Linux/2013-04/82743.htm 之前我有写过如何用style或者是layer-list实现自定义的横向进度条(http:// ...
- Android 设置进度条背景
Android 设置进度条背景 直接上代码 <ProgressBar android:id="@+id/progressBar" android:layout_width=& ...
- android 自定义进度条颜色
android 自定义进度条颜色 先看图 基于产品经理各种自定义需求,经过查阅了解,下面是自己对Android自定义进度条的学习过程! 这个没法了只能看源码了,还好下载了源码, sources\b ...
- Android之进度条2
我之前有写过一篇“Android之进度条1”,那个是条形的进度条(显示数字进度),这次实现圆形进度条. 点击查看Android之进度条1:http://www.cnblogs.com/caidupin ...
- android的进度条使用
android的进度条 1.实现的效果 2.布局代码 先写一个my_browser.xml文件 存放WebView <?xml version="1.0" encoding= ...
- [WPF] 使用三种方式实现弧形进度条
1. 需求 前天看到有人问弧形进度条怎么做,我模仿了一下,成果如下图所示: 当时我第一反应是可以用 Microsoft.Toolkit.Uwp.UI.Controls 里的 RadialGauge 实 ...
- Android多种进度条使用详解
在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...
- Android loading进度条使用简单总结
在这里,总结一下loading进度条的使用简单总结一下. 一.说起进度条,必须说说条形进度条,经常都会使用到嘛,特别是下载文件进度等等,还有像腾讯QQ安装进度条一样,有个进度总给人良好的用户体验. 先 ...
随机推荐
- HDOJ多校联合第四场
B题: C题:仅由'A','G','C','T',4个字母组成,给定一个字符串S,|S|<=15,给定一个整数m,以m为长度且仅含4种字母的字符串T,求LCS(S,T)为0,1,2,3....| ...
- Android ListView(Selector 背景图片 全选 Checkbox等按钮)
list_item.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xm ...
- SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-006-定义切面使用xml
一. you can also define pointcuts that can be used across multiple aspects by placing the <aop:poi ...
- Linux 信号signal处理机制
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全 ...
- UC何小鹏:移动互联网创业需警惕五大“不靠谱
http://tech.qq.com/a/20140121/012443.htm 腾讯科技 启言 1月21日报道 移动互联网创业很容易犯错误,一不小心就陷入“坑”中.UC也是如此.近日,UC创始人何小 ...
- tshark 使用说明
yum install -y wireshark 最近才发现,原来wireshark也提供有Linux命令行工具-tshark.tshark不仅有抓包的功能,还带了解析各种协议的能力.下面我们以两个实 ...
- 开源的文件比较工具:WinMerge,KDiff3,diffuse
为了寻找免费的BeyondCompare的替代品,最后经过实用,找到如下一些: 1.diffuse 感受:如果仅仅是比较两个文本类的文件,这个软件也就够用了. 安装好后,对着文件点击右键,会出现&qu ...
- Form表单中的三种查询方法
1.使用:parameter.G_query_find参数: IF (NAME_IN('PO_HEADERS.PO_HEADER_ID') IS NOT NULL) THEN :paramete ...
- hdu4722Good Numbers(dp)
链接 这题规律其实挺明显的 打表找规律估计都可以 正规点就是DP 算出第N位所包含的good number的数量 如果给出的数是N+1位 就枚举各位上比原来小的数 加上下一位的dp值 一个i写成g了 ...
- Servlet3.0学习总结(四)——使用注解标注监听器(Listener)
Servlet3.0提供@WebListener注解将一个实现了特定监听器接口的类定义为监听器,这样我们在web应用中使用监听器时,也不再需要在web.xml文件中配置监听器的相关描述信息了. 下面我 ...