android 自定义圆形进度条,Android自定义控件实现圆形进度条
项目中常用到的圆形进度条有好多个,从网上搜到的自定义进度条多是封装的比较好的代码,但是不利于初学者,现在本博客就教给大家如何一步步实现自定义进度条的效果:
先看效果如图…
代码实现过程–main布局
这个布局中就是一个简单的引用
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="开始下载"
android:onClick="start" />
android:id="@+id/circleView"
android:layout_width="100dp"
android:layout_height="100dp" />
自定义ProgressView-默认是图中第一种效果
package com.example.pb;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.View;
public class ProgressView extends View {
int progress = 0;
private String text="0%";
private int max = 100;
public ProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public ProgressView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ProgressView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 对于画笔
Paint paint = new Paint();
// 设置抗锯齿
paint.setAntiAlias(true);
// 设置画笔颜色
// 三种样式--Stroke 只要描边 Fill 填充 FILL_AND_STROKE和既有描边又有填充
paint.setStyle(Style.STROKE);
//设置描边宽度
paint.setStrokeWidth(2);
//定义外圈员的颜色
paint.setColor(Color.RED);
//绘制圆形进度条--获取当前控件多大,正好让进度条在这个控件区间内
canvas.drawCircle(getMeasuredWidth()/2, getMeasuredWidth()/2, getMeasuredWidth()/2, paint);
//重新设置描边宽度,这个宽度最好能完全盖过圆形
paint.setStrokeWidth(3);
//定义限制圆弧的矩形,当前这样定义正好让圆弧和圆重合
RectF oval = new RectF(0, 0, getMeasuredWidth(), getMeasuredWidth());
//设置进度条(圆弧的颜色)
paint.setColor(Color.GREEN);
//绘制,设置进度条的度数从0开始,结束值是个变量,可以自己自由设置,来设置进度
//true和false 代表是否使用中心点,如果true,代表连接中心点,会出现扇形的效果
canvas.drawArc(oval, 0, 360 * progress / max, false, paint);
//文字的绘制
paint.setTextSize(40);
//设置文字宽度
paint.setStrokeWidth(1.0f);
//测量文字大小-提前准备个矩形
Rect bounds = new Rect();
//测量文字的宽和高,测量的值可以根据矩形获取
paint.getTextBounds(text, 0, text.length(), bounds);
paint.setColor(Color.BLACK);
paint.setStyle(Style.FILL);
//绘制文字,计算文字的宽高进行设置
canvas.drawText(text, getMeasuredWidth()/2 - bounds.width() / 2,
getMeasuredWidth()/2 + bounds.height() / 2, paint);
}
/**
* 初始设置当前进度的最大值-默认100
* @param max
*/
public void setMax(int max) {
this.max = max;
}
/**
* 更新进度和文字
* @param progress
* @param text
*/
public void setProgressAndText(int progress, String text) {
this.progress = progress;
this.text = text;
//重新绘制
postInvalidate();
}
}
如果想要实现第二种效果
//设置填充模式
paint.setStyle(Style.FILL);
//绘制,设置进度条的度数从0开始,结束值是个变量,可以自己自由设置,来设置进度
//true和false 代表是否使用中心点,如果true,代表连接中心点,会出现扇形的效果
canvas.drawArc(oval, 0, 360 * progress / max, false, paint);
Activity中代码–模拟一下下载的过程,效果随便定义
package com.example.pb;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends Activity {
private ProgressView circleView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
circleView = (ProgressView) findViewById(R.id.circleView);
}
int progress = 0;
public void start(View v) {
// 1000公里
circleView.setMax(100);
progress=0;
new Thread() {
public void run() {
while (true) {
progress = progress + 1;
String text = progress + "%";
circleView.setProgressAndText(progress, text);
try {
sleep(30);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (progress == 100) {
break;
}
}
};
}.start();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android 自定义圆形进度条,Android自定义控件实现圆形进度条相关推荐
- Android自定义View之画圆环(进阶篇:圆形进度条)
前言: 如果你想读懂或者更好的理解本篇文章关于自定义圆环或圆弧的内容.请你务必提前阅读下Android自定义View之画圆环(手把手教你如何一步步画圆环).在这篇文章中,详细描述了最基本的自定义圆环的 ...
- Android 自定义View实现环形带刻度颜色渐变的进度条
上次写了一篇Android 自定义View实现环形带刻度的进度条,这篇文章就简单了,只是在原来的基础上加一个颜色渐变. 按照惯例,我们先来看看效果图 一.概述 1.相比于上篇文章,这里我们的颜色渐变主 ...
- android 自定义图片合集(自定义控件)
留守公司就剩下几个人了.我没有年假故还在坚守.废话不多说,闲来无事.想练习一下自定义控件的应用以及学习图片类操作以及处理等等.所以我在网上找了大神文章,鸿洋大神的博客.找到了自定义控件以及实战图片圆角 ...
- 球体动画Android,Android自定义View实现简单炫酷的球体进度球实例代码
前言 最近一直在研究自定义view,正好项目中有一个根据下载进度来实现球体进度的需求,所以自己写了个进度球,代码非常简单.先看下效果: 效果还是非常不错的. 准备知识 要实现上面的效果我们只要掌握两个 ...
- Android自定义View如此简单 实现点击动画+进度刷新的提交/下载按钮(填坑面试题)
SubmitButton 背景 实现思路 继承View 面试题:构造方法如何选择 自定义属性 面试题:styleable.AttributeSet.TypedArray的关系 测量宽高 面试题:UNS ...
- android自定义滚轴选择器_Android自定义控件实战—滚动选择器PickerView
手机里设置闹钟需要选择时间,那个选择时间的控件就是滚动选择器,前几天用手机刷了MIUI,发现自带的那个时间选择器效果挺好看的,于是就自己仿写了一个,权当练手.先来看效果: 效果还行吧?实现思路就是自定 ...
- Android自定义View之三角,五角星,圆形,心形图片实现
转载请标明出处:http://blog.csdn.net/joker_ya/article/details/38589677 好吧,写之前扯扯.如果是大神的话,可以忽略此文档.有兴趣的话也可以看看.这 ...
- android自定义曲线控件,Android自定义view进阶-- 神奇的贝塞尔曲线
上一篇介绍了自定义view需要知道的基本函数.新开一篇献给借给我vpn的深圳_奋斗小哥. 转载请注明出处:http://blog.csdn.net/wingichoy/article/details/ ...
- android 自定义view 硬件加速,Android自定义View(八) -- 硬件加速
Android自定义View(八) – 硬件加速 今天学习自定义View部分的最有一篇:硬件加速因为无法录制GIF,所以本篇内容基本为原博 本文计划根据HenCoder系列文章进行学习,所以代码风格及 ...
- android 自定义取色器,【Android自定义View】仿Photoshop取色器ColorPicker(二)
ColorPicker 一款仿Photoshop取色器的Android版取色器. 前言 上一篇已经简单介绍了ColorPicker的项目结构以及两种颜色空间,接下来我们详细解析一下ColorPicke ...
最新文章
- shell中$后加引号有什么用($string和$'string')
- Android帧布局(Frame Layout)
- 【Android】Uri、UriMatcher、ContentUris详解
- Android 拍照是开启(调用)闪光灯(原创)
- boost::maximum_weighted_matching用法的测试程序
- F - Parenthesis Checking
- 哈希表的最差复杂度是n2_给定数组A []和数字X,请检查A []中是否有对X | 使用哈希O(n)时间复杂度| 套装1...
- 东莞市商业学校计算机平面设计在哪个校区,东莞市商业学校
- 消息队列面试 - 为什么使用消息队列,消息队列有什么优点和缺点?
- 电脑解压,WinXP电脑上怎么解压文件?
- 使用TensorFlow.js的AI聊天机器人五:创建电影对话聊天机器人
- PHP数组和Json之间的转换
- python三维图怎么显示_如何在python中绘制多个回归3D图
- 如何用C#代码判断一个类的类型
- 编译原理笔记05-语法分析自底向上
- dw改透明度_Dreamweaver技巧制作图片半透明效果
- java基础jdk,jre,jvm作业-答案
- 邮件服务器(邮件系统)最新反垃圾技术分享
- 计算机所有以太网适配的ip,以太网没有有效的ip配置怎么办
- android让字体左右对齐,Android 模仿微信读书文字左右对齐效果