自定义Button成进度条
ProgressButton源码:
package com.example.progressbutton; import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.Button; /**
* @author Administrator
* @time 2015-7-19 下午4:41:06
* @des TODO
*
* @version $Rev$
* @updateAuthor $Author$
* @updateDate $Date$
* @updateDes TODO
*/
public class ProgressButton extends Button {
private boolean mProgressEnable;
private long mMax = 100;
private long mProgress;
private Drawable mProgressDrawable; /**设置是否允许进度*/
public void setProgressEnable(boolean progressEnable) {
mProgressEnable = progressEnable;
} /**设置进度的最大值*/
public void setMax(long max) {
mMax = max;
} /**设置当前的进度,并且进行重绘操作*/
public void setProgress(long progress) {
mProgress = progress;
invalidate();
} /**设置progressButton的进度图片*/
public void setProgressDrawable(Drawable progressDrawable) {
mProgressDrawable = progressDrawable;
} public ProgressButton(Context context, AttributeSet attrs) {
super(context, attrs);
} public ProgressButton(Context context) {
super(context);
} @Override
protected void onDraw(Canvas canvas) {
if (mProgressEnable) {
Drawable drawable = new ColorDrawable(Color.BLUE);
int left = 0;
int top = 0;
int right = (int) (mProgress * 1.0f / mMax * getMeasuredWidth() + .5f);
int bottom = getBottom();
drawable.setBounds(left, top, right, bottom);// 必须的.告知绘制的范围
drawable.draw(canvas);
} super.onDraw(canvas);// 绘制文本,还会绘制背景
}
}
控制显示Demo:
package com.example.progressbutton; import android.os.AsyncTask;
import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.view.Menu;
import android.view.View; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} public void click(final View view) { new AsyncTask<Void, Integer, Void>() {
int progress=0;
private ProgressButton mButton;
@Override
protected void onPreExecute() {
mButton = (ProgressButton) view;
mButton.setProgressEnable(true);
} @Override
protected Void doInBackground(Void... params) {
for (int i = 0; i <= 100; i++) {
SystemClock.sleep(100);
publishProgress(i);
}
return null;
} @Override
protected void onProgressUpdate(Integer... values) {
mButton.setProgress(values[0]);
mButton.setText(values[0]+"%");
} protected void onPostExecute(Void result) { }; }.execute(); } }
效果图:

自定义Button成进度条的更多相关文章
- Android零基础入门第52节:自定义酷炫进度条
原文:Android零基础入门第52节:自定义酷炫进度条 Android系统默认的ProgressBar往往都不能满足实际开发需要,一般都会开发者自定义ProgressBar. 在Android开发中 ...
- Android简易实战教程--第十七话《自定义彩色环形进度条》
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52203533 点击打开链接 在Android初级教程里面,介绍了shape用法 ...
- Android自定义圆角矩形进度条2
效果图: 或 方法讲解: (1)invalidate()方法 invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时, 调用invalidate()才 ...
- WPF 自定义绕圈进度条
在设计界面时,有时会遇到进度条,本次讲解如何设计自定义的绕圈进度条,直接上代码: 1.控件界面 <UserControl x:Class="ProgressBarControl&quo ...
- android 开发-自定义多节点进度条显示
看效果图: 里面的线段颜色和节点图标都是可以自定义的. main.xml <RelativeLayout xmlns:android="http://schemas.android.c ...
- Android 自定义 View 圆形进度条总结
Android 自定义圆形进度条总结 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 微信公众号:牙锅子 源码:CircleProgress 文中如有纰漏,欢迎大家留言指出. 最近 ...
- Android:webView加载h5网页视频,播放不了,以及横屏全屏的问题和实现自定义加载进度条的效果
1.webView加载h5网页视频,播放不了,android3.0之后要在menifest添加硬件加速的属性 android:hardwareAccelerated="true". ...
- 低版本系统兼容的ActionBar(三)自定义Item视图+进度条的实现+下拉导航+透明ActionBar
一.自定义MenuItem的视图 custom_view.xml (就是一个单选按钮) <?xml version="1.0" encoding="u ...
- Android 自定义圆形旋转进度条,仿微博头像加载效果
微博 App 的用户头像有一个圆形旋转进度条的加载效果,看上去效果非常不错,如图所示: 据说 Instagram 也采用了这种效果.最近抽空研究了一下,最后实现的效果是这样: 基本上能模拟出个大概,代 ...
随机推荐
- PowerCmd(命令行增强工具) 2.2 免费版
软件名称: PowerCmd(命令行增强工具) 2.2 免费版 软件语言: 英文 授权方式: 免费软件 运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.8MB ...
- 防范CSRF(一)
CSRF是跨网站伪造请求的缩写.大致的攻击流程是,黑客获得浏览器向服务器发送的请求,然后对请求进行修改,让服务器执行指定的操作. 防范方式可以使用微软提供的解决方案. View放置Html.AntiF ...
- mysql最大连接数问题
进入mysql系统就, 查询最大连接数:show variables like 'max_connections'; 修改最大连接数:set global max_connections=1000;
- 解决 git extensions 每次提交需要输入用户名和密码
打开git bash 输入用户名和密码 git config --global user.name "username" git config --global user.emai ...
- SQL Server 2008新特性——更改跟踪
在大型的数据库应用中,经常会遇到部分数据的脱机和多个数据库的合并问题.比如现在有一个全省范围使用的应用程序,每个市都部署了单独的相同的应用程序服务器和数据库服务器,每个月需要将全省所有市的数据全部汇总 ...
- yii2.0面包屑的使用及启用中文
(注:己yii2.0高级应用为例) 面包屑在布局里定义好之后,在视图中直接使即可,但默是使用英文. 一.布局中定义面包屑 backend/views/layout/main.php: use back ...
- Q & A
1 使用linux命令或者shell实现:文件words存放英文单词,格式为每行一个英文单词(单词可以重复),统计这个文件中出现次数最多的前10个单词. cat words.txt | sort | ...
- in_array 判断的一些见解
我个人见解in_array的判断是== 并不是=== 证明如下: $arr=(array_merge(range(1, 9),range('a', 'z'),range('A', 'Z')));$m ...
- MPlayerX播放视频屏幕中间有图标遮挡的解决办法
问题如下: 解决办法: 在应用程序文件夹中找到MPlayerX,鼠标右击应用图标,在右键菜单中选择"显示包内容",进入如下目录:Contents->Resources,找到l ...
- UEditor+七牛,实现图片直连上传
最近做的项目,涉及到使用富文本编辑器,我选择了百度的UEditor.同时,我们的图片放在七牛云存储上.关于这两者间的集成,我写下一些个人的经验,与大家分享. 图片上传方案 目前来说,Web端基于七牛等 ...