博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android ProgressBar分析及自定义ProgressBar
阅读量:5049 次
发布时间:2019-06-12

本文共 2870 字,大约阅读时间需要 9 分钟。

 

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来设置:

然后在使用的时候,在进度达到不同的情况下,设置一下进度就能显示相应的变化啦~

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源码。

看这个样子,奥秘只能在style里面,让我们进去看看~

这个地方长这个毛线样,分别定义了图片资源和宽高,那么可想而知,我们要改的是图。然后再进@android:drawable/progress_large_white里面去看一下~

这个时候已经没有链接了,我们直接去sdk里找,具体位置是:D:\Java\android-sdk-windows\platforms\android-19\data\res\drawable

找progress_large_white.xml看一下。

啊,原来是这样的~我们修改一下drawable不就得了,那来吧~

首先找一张图片放进资源文件夹里

然后写一个上面那样的animated-rotate,把android:drawable的值换成自己的图片资源。

再然后就是写一个style,把里面的android:indeterminateDrawable的值换成自己写的animated-rotate文件名。

再再然后就是在progressbar里面的style的值换成自己写的style,重新来一遍就是了~

 

 

然后再说一说水平进度条啦~

因为水平进度条有完成和没完成之分,我们自定义主要就是自定义这两边的样子~

这个你就在progressbar里面加一个progressDrawable。

然后里面需要放一个xml。

 

然后你就找两个图放上去就好啦~

但是,这两种自定义只是换下背景图而已,基本的样子还是没有发生什么变化。其实我们可以做一个小动画(比如韩寒的One里面的那棵不断生长的矢量树用的就是逐帧动画),执行耗时操作的时候调用出来,执行完毕撤销~

转载于:https://www.cnblogs.com/glimpse/p/5273046.html

你可能感兴趣的文章
设计模式六大原则(5):迪米特法则
查看>>
对Feature的操作插入添加删除
查看>>
javascript String
查看>>
ecshop 系统信息在哪个页面
查看>>
【转】码云source tree 提交超过100m 为什么大文件推不上去
查看>>
Oracle数据库的增、删、改、查
查看>>
MySql执行分析
查看>>
git使用中的问题
查看>>
yaml文件 .yml
查看>>
linux字符集修改
查看>>
phpcms 添加自定义表单 留言
查看>>
mysql 优化
查看>>
读书笔记 ~ Nmap渗透测试指南
查看>>
WCF 配置文件
查看>>
动态调用WCF服务
查看>>
oracle导出/导入 expdp/impdp
查看>>
类指针
查看>>
css修改滚动条样式
查看>>
2018.11.15 Nginx服务器的使用
查看>>
Kinect人机交互开发实践
查看>>