Android 隐藏环形进度条,Android环形进度条
分享一个环形进度条供大家参考,项目地址
效果如图
image
下面是该自定义进度条的代码,目前属于简陋版本,不过注释很详细,方便扩展。
首先是自定View的代码
/**
* 作者:GJP on 2018/7/26 15:12
* 邮箱:xiaoxiao9575@126.com
* 描述:
*/
public class CircularProgressView extends View {
private Context mContext;
private Paint mPaint;
private int mProgress = 0;
private static int MAX_PROGRESS = 100;
/** * 弧度 */
private int mAngle;
/** * 中间的文字 */
private String mText;
/** * 外圆颜色 */
private int outRoundColor;
/** * 内圆的颜色 */
private int inRoundColor;
/** * 线的宽度 */
private int roundWidth;
private int style;
/*** 字体颜色*/
private int textColor;
/** * 字体大小 */
private float textSize;
/** * 字体是否加粗 */
private boolean isBold;
/** * 进度条颜色 */
private int progressBarColor;
public CircularProgressView(Context context) {
this(context, null);
}
public CircularProgressView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CircularProgressView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr);
mContext = context;
init(attrs);
}
@TargetApi(21)
public CircularProgressView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
mContext = context;
init(attrs);
}
/**
* 解析自定义属性
* @param attrs
*/
public void init(AttributeSet attrs) {
mPaint = new Paint();
TypedArray typedArray = mContext.obtainStyledAttributes(attrs, R.styleable.CircleProgressBar);
outRoundColor = typedArray.getColor(R.styleable.CircleProgressBar_outCircleColor, getResources().getColor(R.color.colorPrimary));
inRoundColor = typedArray.getColor(R.styleable.CircleProgressBar_inCircleColor, getResources().getColor(R.color.colorPrimaryDark));
progressBarColor = typedArray.getColor(R.styleable.CircleProgressBar_progressColor, getResources().getColor(R.color.colorAccent));
isBold = typedArray.getBoolean(R.styleable.CircleProgressBar_textBold, false);
textColor = typedArray.getColor(R.styleable.CircleProgressBar_textColor, Color.BLACK);
roundWidth = typedArray.getDimensionPixelOffset(R.styleable.CircleProgressBar_lineWidth, 20);
typedArray.recycle();
}
@Override
protected void onDraw(Canvas canvas) { /** * 画外圆 */
super.onDraw(canvas);
int center = getWidth() / 2;//圆心
int radius = (center - roundWidth / 2);// 半径
mPaint.setColor(outRoundColor); //外圆颜色
mPaint.setStrokeWidth(roundWidth); //线的宽度
mPaint.setStyle(Paint.Style.STROKE); //空心圆
mPaint.setAntiAlias(true); //消除锯齿
canvas.drawCircle(center, center, radius, mPaint); //内圆
mPaint.setColor(inRoundColor);
radius = radius - roundWidth;
canvas.drawCircle(center, center, radius, mPaint); //画进度是一个弧线
mPaint.setColor(progressBarColor);
RectF rectF = new RectF(center - radius, center - radius, center + radius, center + radius);//圆弧范围的外接矩形
canvas.drawArc(rectF, -90, mAngle, false, mPaint);
canvas.save(); //平移画布之前保存之前画的
// 画进度终点的小球,旋转画布的方式实现
mPaint.setStyle(Paint.Style.FILL);
// 将画布坐标原点移动至圆心
canvas.translate(center, center);
// 旋转和进度相同的角度,因为进度是从-90度开始的所以-90度
canvas.rotate(mAngle - 90);
// 同理从圆心出发直接将原点平移至要画小球的位置
canvas.translate(radius, 0);
canvas.drawCircle(0, 0, roundWidth, mPaint);
// 画完之后恢复画布坐标
canvas.restore();
// 画文字将坐标平移至圆心
canvas.translate(center, center);
mPaint.setStrokeWidth(0);
mPaint.setColor(textColor);
if (isBold) { //字体加粗
mPaint.setTypeface(Typeface.DEFAULT_BOLD);
} if (!TextUtils.isEmpty(mText)) {
// 动态设置文字长为圆半径,计算字体大小
float textLength = mText.length();
textSize = radius / textLength;
mPaint.setTextSize(textSize);
// 将文字画到中间
float textWidth = mPaint.measureText(mText);
canvas.drawText(mText, -textWidth / 2, textSize / 2, mPaint);
}
}
public int getProgress() {
return mProgress;
}
/**
* 设置进度
* @return
*/
public void setProgress(int p) {
if (p > MAX_PROGRESS) {
mProgress = MAX_PROGRESS;
mAngle = 360;
} else {
mProgress = p;
mAngle = 360 * p / MAX_PROGRESS;
}
//更新画布
invalidate();
}
public String getText() {
return mText;
}
/**
* 设置文本
* @param mText
*/
public void setText(String mText) {
this.mText = mText;
invalidate();
}
}
styles.xml中需要添加
再布局文件中引用的示例代码
android:id="@+id/progress_bar"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
android:layout_width="150dp"
android:layout_height="150dp"
app:inCircleColor="#DCDCDC"
app:outCircleColor="#F0F0F0"
app:progressColor="#50CE7B"
app:textBold="true"
app:textColor="#50CE7B"
app:lineWidth="5dp" />
Activity中具体控制进度
public class MainActivity extends AppCompatActivity {
private CircularProgressView progress_bar;
@SuppressLint("HandlerLeak")
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
progress_bar.setProgress(msg.what);
progress_bar.setText(progress_bar.getProgress()+"%");
addProgress(msg.what);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
progress_bar = (CircularProgressView) findViewById(R.id.progress_bar);
progress_bar.setProgress(0);
progress_bar.setText(progress_bar.getProgress()+"%");
addProgress(0);
}
private void addProgress(int i) {
if (i>=100){
i = 0;
}else {
++i;
}
handler.sendEmptyMessageDelayed(i, 100);
}
}
关于这个自定义的环形进度条没什么说的,代码注释很详细,使用方法都粘贴出来了,因为扩展起来很方便所以粘贴出来供大家参考和自己留作记录,如果有时间后续会发一个完善些的圆形进度条到GitHub上。
Android 隐藏环形进度条,Android环形进度条相关推荐
- android隐藏app应用程序,Android开发:怎样隐藏自己的app应用
本文主要介绍怎样通过改动AndroidManifest.xml清单文件来达到隐藏自身应用的目的,不是隐藏第三方应用.为了不浪费大家时间.特此说明. 第一种 改动Activity标签下的节点下的cate ...
- Android隐藏导航栏按键,Android如何控制导航栏单个按键的显隐状态
我们都知道Android系统的导航栏通常有三个按键,分别是BACK, HOME, APP_SWITCH. 网上很多有关导航栏和状态栏显隐的文章,但几乎都是控制导航栏或状态栏所有按键同时显示或消失,如果 ...
- android隐藏软键盘方法,Android显示和隐藏软键盘方法
InputMethodManager类 Android中软键盘的管理主要是通过InputMethodManager类来完成的. InputMethodManager对象的获取方法如下: 获取到Inpu ...
- android隐藏软键盘方法,Android使用InputMethodManager显示和隐藏软键盘
Android主要用InputMethodManager来对软键盘进行管理.手动显示或隐藏软键盘前需要先获取InputMethodManager. InputMethodManager imm = ( ...
- Android BGradualProgress 多种渐变、直角or弧角、进度条、加载条
可实现多种渐变.直角or弧角.进度条.加载条 (Various gradient, right or arc angle, progress bar and loading bar can be re ...
- Android 自定义View实现环形带刻度的进度条
本篇文章讲的是自定义View实现环形带刻度的进度条.和往常一样,主要还是想总结一下自定义View实现环形带刻度的进度条的开发过程以及一些需要注意的地方. 按照惯例,我们先来看看效果图 一.我们如何来实 ...
- Android的进度条(ProgressBar)、拖动条(SeekBar)
Android的进度条与拖动条 一.ProgressBar(进度条) 进度条,ProgressBar,分为环形和水平条行, 首先看下效果图,Progress进度加载. 进度条XML中的属性 ...
- android编程任务进度条,Android 进度条 ProgressBar - Android 入门教程
今天要学的是一个特定场合要用到的控件--进度条控件.进度条的作用不言而喻,而在实际使用中,通常会有两种类型的进度条:横向进度条和圆形进度条.当然,ProgressBar 也是支持这两种类型的,可以应对 ...
- android 4.2.2进度条,Android实现个性化的进度条
1.案例效果图 2.准备素材 progress1.png(78*78) progress2.png(78*78) 3.原理 采用一张图片作为ProgressBar的背景图片(一般采用颜色比较浅的).另 ...
- android加载百分比功能,android进度条怎么显示百分比
android布局文件里的ProgressBar长形进度条怎么自 在windows操作系统下Android studio按照如下步骤自动义ProgressBar长形进度条的样式. 首先创建一个andr ...
最新文章
- 【青少年编程】【一级】 奔跑的马
- 百度云盘上传文件和下载文件慢的解决办法
- 降采样处理 resample函数
- 多个输出用java怎么写_请问用java写程序怎么输出这两个图形
- 1.1 lambda表达式
- SpringBoot中Bean按条件装配
- mfc oninitdialog 中的hwnd == null_在SOUI中使用动态多语言切换
- android 框架_推荐一个更贴近 android 场景的启动框架 | Anchors
- Undefined symbols for architecture x86_64:
- echarts环形图加边框
- 微信小程序登陆方式,详细代码步骤如下。
- 移动硬盘安装双系统windows10和ubuntu18.04
- 【Unity】Sprite Atlas功能讲解
- 《脱颖而出——成功网店经营之道》一2.6 连横:返利模式的应用及分销
- 入网许可证_入网许可证真伪鉴别
- 自动化测试工程师应聘要求
- 如何下载 International Conference on Machine Learning(ICML)顶会的论文?从哪找ICML顶会论文?如何判断会议和期刊级别?
- Redis 使用场景
- Win10 OneNote 一直卡的登录界面
- [生存志] 第31节 盘古开天地