Android ProgressBar分析及自定义ProgressBar
ProgressBar是在执行耗时操作时的一种人性化设计。分为两种形式:转圈的,能显示进度的。
而能取决于是什么样式的PregressBar,当然就是PregressBar的样式啦~
Widget.ProgressBar.Horizontal 水平进度条
Widget.ProgressBar.Small 小环形进度条
Widget.ProgressBar.Large 大环形进度条
Widget.ProgressBar.Inverse 普通大小的环形进度条
Widget.ProgressBar.Small.Inverse 小环形进度条
Widget.ProgressBar.Large.Inverse 大环形进度条 首先讲一下能够显示进度的ProgressBar.
定义带进度条的progressbar除了需要设置style以外还要设置一个最大值max,表示进度的结束值。
如下可以通过xml来设置,除此之外还可以在代码中使用setMax来设置:
<!-- 定义一个水平进度条 -->
<ProgressBar
android:id="@+id/bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
style="@android:style/Widget.ProgressBar.Horizontal"
/>
然后在使用的时候,在进度达到不同的情况下,设置一下进度就能显示相应的变化啦~
package org.crazyit.ui; public class ProgressBarTest extends Activity
{
// 该程序模拟填充长度为100的数组
private int[] data = new int[100];
int hasData = 0;
// 记录ProgressBar的完成进度
int status = 0;
ProgressBar bar;
// 创建一个负责更新的进度的Handler
Handler mHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
// 表明消息是由该程序发送的
if (msg.what == 0x111)
{
bar.setProgress(status);//设置进度
}
}
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bar = (ProgressBar) findViewById(R.id.bar);
// 启动线程来执行任务
new Thread()
{
public void run()
{
while (status < 100)
{
// 获取耗时操作的完成百分比
status = doWork();
// 发送消息
mHandler.sendEmptyMessage(0x111);
}
}
}.start();
}
// 模拟一个耗时的操作
public int doWork()
{
// 为数组元素赋值
data[hasData++] = (int) (Math.random() * 100);
try
{
Thread.sleep(100);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
return hasData;
}
}
好吧,这些都是直接用的书里的示例代码。红色代码就是设置相应的进度啦~
代码里在线程中执行了模拟耗时操作dowork函数,当然最常用的是把dowork函数换成下载函数。
当然使用完毕我们并不希望再看到他,这个时候调用一下
bar.setVisibility(View.GONE);
就好啦~
自定义ProgressBar
当然很多情况,我们是不大会用他们原本的样式的,会自定义一下这些东西。
首先讲一下环形进度条xml源码。
<!-- 定义一个大环形进度条 -->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Large"
/>
看这个样子,奥秘只能在style里面,让我们进去看看~
<style name="Widget.ProgressBar.Large">
<item name="android:indeterminateDrawable">@android:drawable/progress_large_white</item>
<item name="android:minWidth">76dip</item>
<item name="android:maxWidth">76dip</item>
<item name="android:minHeight">76dip</item>
<item name="android:maxHeight">76dip</item>
</style>
这个地方长这个毛线样,分别定义了图片资源和宽高,那么可想而知,我们要改的是图。然后再进@android:drawable/progress_large_white里面去看一下~
这个时候已经没有链接了,我们直接去sdk里找,具体位置是:D:\Java\android-sdk-windows\platforms\android-19\data\res\drawable
找progress_large_white.xml看一下。
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/spinner_black_76"
android:pivotX="50%"
android:pivotY="50%"
android:framesCount="12"
android:frameDuration="100" />
啊,原来是这样的~我们修改一下drawable不就得了,那来吧~
首先找一张图片放进资源文件夹里
然后写一个上面那样的animated-rotate,把android:drawable的值换成自己的图片资源。
再然后就是写一个style,把里面的android:indeterminateDrawable的值换成自己写的animated-rotate文件名。
再再然后就是在progressbar里面的style的值换成自己写的style,重新来一遍就是了~
然后再说一说水平进度条啦~
因为水平进度条有完成和没完成之分,我们自定义主要就是自定义这两边的样子~
这个你就在progressbar里面加一个progressDrawable。
<!-- 定义一个水平进度条,并改变轨道外观 -->
<ProgressBar
android:id="@+id/bar2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
android:progressDrawable="@drawable/my_bar"
style="@android:style/Widget.ProgressBar.Horizontal"/>
然后里面需要放一个xml。
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 定义轨道的背景 -->
<item android:id="@android:id/background"
android:drawable="@drawable/no" />
<!-- 定义轨道上已完成部分的样式 -->
<item android:id="@android:id/progress"
android:drawable="@drawable/ok" />
</layer-list>
然后你就找两个图放上去就好啦~
但是,这两种自定义只是换下背景图而已,基本的样子还是没有发生什么变化。其实我们可以做一个小动画(比如韩寒的One里面的那棵不断生长的矢量树用的就是逐帧动画),执行耗时操作的时候调用出来,执行完毕撤销~
Android ProgressBar分析及自定义ProgressBar的更多相关文章
- Android三种实现自定义ProgressBar的方式介绍
一.通过动画实现 定义res/anim/loading.xml如下: View Row Code<?xml version="1.0" encoding="UTF- ...
- AndroidのUI设计研究(一)——自定义ProgressBar
最近迷上进度条,使用进度条可以增强用户体验,让用户心里有个底,再无奈的等待中体会loading的乐趣. 记得以前优乐美的官网,进入主页加载资源,显示给用户看的就是,炫彩背景下,一个杯子里的奶茶随着加载 ...
- Android自定义ProgressBar样式
我们使用的进度条多种多样,下面有几种自定义的进度条的样式,下面介绍几个. 进度条的有基本的四种样式: 默认风格的进度条: android:progressBarStyle 水平长型进度条: andro ...
- Android 常用控件自定义样式RadioButton、CheckBox、ProgressBar、
一.RadioButton / CheckBox 系统自带的RadioButton/CheckBox的样式,注定满足不了实际运用中的情况,有时候自定义自己的样式:此次把自己中工作学习过程中所学到的东西 ...
- Android学习笔记_81_Android ProgressDialog ProgressBar 各种效果
1,弹出Dialog 屏幕不变暗. 创建一个样式就OK了:在styles.xml文件里添加样式: 1, <style name="dialog" parent="@ ...
- android基本控件学习-----ProgressBar
ProgressBar(进度条)讲解 一.常用属性和基础使用实例 (1)常用属性: android:max:进度条的最大值 android:progress:进度条已完成进度值 android:pro ...
- ProgressBar+WebView实现自定义浏览器
当我们使用浏览器浏览网页时,总会看到下图页面的样子,上面是一个地址栏,地址栏下面显示加载进度,加载完成后进入页面内容,带颜色的进度条总是少不了的,那样子看起来也舒服,如何实现自定义手机浏览器功能呢? ...
- Android架构分析之使用自定义硬件抽象层(HAL)模块
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 在上一篇博 ...
- Android Launcher分析和修改11——自定义分页指示器(paged_view_indicator)
Android4.0的Launcher自带了一个简单的分页指示器,就是Hotseat上面那个线段,这个本质上是一个ImageView利用.9.png图片做,效果实在是不太美观,用测试人员的话,太丑了. ...
随机推荐
- selenium python的使用(一)
下面是一个爬取知网数据的例子,使用selenium 用python爬取数据 1.创建对象,打开指定地址,在休眠的20秒内输入搜索项 driver= webdriver.Chrome() driver. ...
- tensorfolw配置过程中遇到的一些问题及其解决过程的记录(配置SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real-Time Object Detection for Autonomous Driving)
今天看到一篇关于检测的论文<SqueezeDet: Unified, Small, Low Power Fully Convolutional Neural Networks for Real- ...
- angularjs 动态加载事件的另一种实现
/** 初始化酒店列表 */ function inintHotel(params,url,$http,$scope){ $http.jsonp(url).success(function(res, ...
- ECshop通过文章分类的ID实现不同模板
当客户需要想要用不同模板来实现文章页面时,文章就需要实现调用不同模板的内容,着手点就是它的分类ID.直接通过分类ID来判断一下,现在68ecshop技术来告诉你该怎么做 方法如下所示: 一.打开根目录 ...
- Golang Import使用入门
我们在写Go代码的时候经常用到import这个命令用来导入包文件,而我们经常看到的方式参考如下: import( "fmt" ) 然后我们代码里面可以通过如下的方式调用 fmt.P ...
- android 屏幕分辨率 更改
手头上有一个320x240的LCD.运行android时,显示内容过大,需要更改屏幕的分辨率. 参考链接 http://www.bkjia.com/Androidjc/899396.html http ...
- 关于CLR、CIL、CTS、CLS、CLI、BCL和FCL
如果要想深入学习.NET平台,那么标题中的这些关键字对你来说并不陌生,这些名词构成了.NET庞大的生态系统,为了宏观认识.NET平台,学些.NET架构体系,针对一些常用常用名词的理解是很有必要的,未必 ...
- 打造Linux三流娱乐环境,二流办公环境,一流Java开发环境
写这篇文章的目的首先是为让自己以后再装linux环境时候,不用再通宵google+百度,做个备忘录,其次,给新入Linux环境的同学分享一点个人经验,再高尚点的动机也算是想做为开源技术的传播布道者.我 ...
- 五句话搞定JavaScript作用域
JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走遍天下都不怕... 一.“JavaScript中无块级作用域” 在Java或C# ...
- Spring常见问题-通配符的匹配很全面, 但无法找到元素 'aop:aspectj-autoproxy' 的声明