前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android-ProgressBar实现进度条

Android-ProgressBar实现进度条

作者头像
圆号本昊
发布2021-09-24 14:35:42
9210
发布2021-09-24 14:35:42
举报
文章被收录于专栏:github@hornhuang

进度条ProgressBar的使用主要呦两种方向;

1.使用官方默认样式

2.使用自定义样式

先看效果:

详细代码实现文末给出

关于系统自带样式:

在 style="@android:style 中有许多系统自带样式,大家可以更具自身喜好选择。

如果不选择 style 系统会默认使用上图中红色的样式。

关于自定义样式:

这里我们最好看看源码 很容易理解

主要分为三个部分:当前进度、缓冲进度、以及背景 三个属性

这里我们通过在drawable里新建my_bar.xml来实现

这里有个注意点  很多人写了xml后发现 直接就显示满进度 而不是缓慢增长

由于是替换系统自带样式,所以id必须与系统保持一致:(如:android:id="@android:id/background")

代码语言:javascript
复制

这里对比下系统源码就很好理解了:

这里的模拟方法采用的是线程结合Handler

由于线程不能直接改变控件属性 所以需要用Handler来接受线程发出的Message

具体方法如下:

代码语言:javascript
复制
public class MainActivity extends Activity {
    //记录ProgressBar的完成进度
    private int sum1=0,sum2 = 0 ;
    ProgressBar bar1,bar2;
    //创建一个负责更新进度的Handler
    Handler mHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            //表明消息是本程序发送的
            if (msg.what == 0x111){
                bar1.setProgress(sum1);
                bar2.setProgress(sum2);
            }

        }
    };
    //模拟耗时
    Thread thread = new Thread(){
        @Override
        public void run() {
            while (sum2 < 100){
                //bar1获取完成工作的百分比
                if (sum1 > 100){
                    sum1 = 100;
                    if (sum2<100){
                        sum2 += (int) (Math.random()*25);
                    }else {
                        sum2 = 100;
                        thread.stop();
                    }
                    sum1=0;
                }else {
                    sum1 = sum1 + (int) (Math.random()*25);
                }
                try{
                    Thread.sleep(1000);
                }catch (InterruptedException e){
                    e.printStackTrace();
                }
                //更新ProgressBar
                mHandler.sendEmptyMessage(0x111);
            }

        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bar1 = (ProgressBar) findViewById(R.id.bar);
        bar2 = (ProgressBar) findViewById(R.id.bar2);
        thread.start();
    }


}

最后在给出布局文件:

代码语言:javascript
复制
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/12/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档