自己写的ProgressBar隐藏,借助Thread、Handler进度条增加,借鉴别人的经验


package com.myprogressbarview;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends Activity {
    private ProgressBar oneProgressBar;
    private ProgressBar twoProgressBar;
    private Button button;

    /*
     * 自定义Handler信息代码,用以作为标识事件处理
     * 在类成员变量中声明了两个整数:GUI_STOP_NOTIFIER与GUI_THREADING_NOTIFIER,
     * 这两个整数将作为信息传递出来时的信号标识,前者为当Thread需要喊停的时候处理,后者为进程正在运行过程中所需处理的标识。
     */
    protected static final int GUI_STOP_NOTIFIER = 0x108;
    protected static final int GUI_THREADING_NOTIFIER = 0x109;

    private int onCounter = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 设置窗口模式,,因为需要显示进度条在标题栏
        requestWindowFeature(Window.FEATURE_PROGRESS);
        setProgressBarVisibility(true);
        
        setContentView(R.layout.activity_main);

        oneProgressBar = (ProgressBar) findViewById(R.id.progressBar1);
        twoProgressBar = (ProgressBar) findViewById(R.id.progressBar2);
        button = (Button) findViewById(R.id.button1);

        // 调用setIndeterminate方法赋值indeterminate模式为false,不明确(false)就是滚动条的当前值自动在最小到最大值之间来回移动
        oneProgressBar.setIndeterminate(false);
        twoProgressBar.setIndeterminate(false);

        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO 自动生成的方法存根
                //设置ProgressBar可见状态
                oneProgressBar.setVisibility(View.VISIBLE);
                twoProgressBar.setVisibility(View.VISIBLE);
                
                //设置ProgressBar最大值
                oneProgressBar.setMax(100);
                
                //设置progressBar当前值
                oneProgressBar.setProgress(0);
                twoProgressBar.setProgress(0);
                
                //通过线程改变ProgressBar的值
                new Thread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO 自动生成的方法存根
                        for(int i=0; i<10; i++){
                            try{
                                /* 成员变量,用以识别加载进度 */  
                                onCounter = (i+1)*20;
                                
                                /* 每运行一次循环,即暂停1秒 */
                                Thread.sleep(1000);
                                
                                /* 当Thread运行5秒后显示运行结束 */
                                if(i==4){
                                    
                                    /* 以Message对象,传递参数给Handler */
                                    Message m = new Message();
                                    
                                    /* 以what属性指定User自定义 */
                                    m.what = MainActivity.GUI_STOP_NOTIFIER;
                                    MainActivity.this.handler.sendMessage(m);
                                    break;
                                }else{
                                    Message m = new Message();
                                    m.what = MainActivity.GUI_THREADING_NOTIFIER;
                                    MainActivity.this.handler.sendMessage(m);
                                    
                                }
                            }catch(Exception e){
                                e.printStackTrace();
                            }
                        }
                    }
                }).start();
            }

        });
    }
        
    /* Handler构建之后,会监听传来的信息代码 */  
    Handler handler = new Handler(){
        public void handleMessage(Message mag){
            switch(mag.what){
            
            //ProgressBar已是最大值
            case MainActivity.GUI_STOP_NOTIFIER:
                /* 设置ProgressBar Widget为隐藏 */
                oneProgressBar.setVisibility(View.GONE);
                twoProgressBar.setVisibility(View.GONE);
                Thread.currentThread().interrupt();
                break;
                 /* 当取得标识为持续在进程当中时所取得的信息 */
            case MainActivity.GUI_THREADING_NOTIFIER:
                if(!Thread.currentThread().isInterrupted()){
                    
                    //改变ProgressBar的当前值
                    oneProgressBar.setProgress(onCounter);
                    twoProgressBar.setProgress(onCounter);
                    
                    // 设置标题栏中前景的一个进度条进度值
                    setProgress(onCounter * 100);
                    
                    // 设置标题栏中顶部的一个进度条进度值
                    setSecondaryProgress(onCounter * 50);
                }
                break;
            }
            super.handleMessage(mag);
        }
    };
}


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
电子图书资源服务系统是一款基于 Java Swing 的 C-S 应用,旨在提供电子图书资源一站式服务,可从系统提供的图书资源中直接检索资源并进行下载。.zip优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人系统开发经验充足,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(若有),项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注计算机领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能 【无积分此资源可联系获取】 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。积分/付费仅作为资源整理辛苦费用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值