zoukankan      html  css  js  c++  java
  • Android控件之ProgressBar

    Android控件之ProgressBar

    1 ProgressBar简介

    ProgressBar是进度条,常用于显示程序加载/安装进度等。

    2 ProgressBar示例

    创建一个activity,包含1个ProgressBar。在Activity中开启一个线程,线程不断的增加ProgressBar的进度;当进度增加满的时候,隐藏ProgressBar。

    应用层代码

    package com.skywang.control;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.view.View;
    import android.widget.ProgressBar;
    import android.widget.SeekBar;
    import android.util.Log;
    
    import java.lang.Runnable;
    
    public class ProcessBarTest extends Activity {
        private static final String TAG="SKYWANG";
    
        // 计数线程
        private CountThread mCountThread;
        // ProcessBar
        private ProgressBar mProgressBar;
        
        // 处理当ProcessBar的进度完成的情况
        private static final int MSG_PROGRESS_BAR_FULL = 1; 
        private Handler handler = new Handler() {
    
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                case MSG_PROGRESS_BAR_FULL: {
                    Log.d(TAG, "make the ProgressBar Gone!");
                    // 隐藏ProcessBar。
                    mProgressBar.setVisibility(View.GONE);
                    // 终止线程
                    if (mCountThread != null)
                        mCountThread.interrupt();
                        break;
                    }
                default:
                    break;
                }
            }
        };
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.process_bar_test);
    
            mProgressBar = (ProgressBar) findViewById(R.id.pbar_def);
            
            // 开启计数线程
            mCountThread = new CountThread();
            mCountThread.start();
        }
    
        private class CountThread extends Thread {
    
            @Override
            public void run() {
                super.run();
    
                while (!isInterrupted()) {
                    // 线程休眠200ms
                    try {
                        Thread.sleep(200);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    
                    int progress = mProgressBar.getProgress() + 2;
                    int max = mProgressBar.getMax();
    
                    Log.d(TAG, "progress : "+progress+" , max : "+max);
                    if (progress < max)
                        mProgressBar.setProgress(progress);
                    else {
                        mProgressBar.setProgress(max);
                        // 发送消息给handler,让它隐藏ProcessBar。
                        handler.sendEmptyMessage(MSG_PROGRESS_BAR_FULL);
                    }
                }   
            }
        }
        
        @Override
        public void onDestroy() {
            super.onDestroy();
            // 终止计数线程
            if (mCountThread != null)
                mCountThread.interrupt();
        }
    
    }

    代码说明:

    CountThread是ProcessBarTest的内部线程类。
    在打开ProcessBarTest时,会自动执行onCreate();然后通过new CountThread()新建线程,再mCountThread.start()启动线程。
    线程启动后,每个200ms将进度条的进度值+2;然后进度条已经满格,则调用handler.sendEmptyMessage(MSG_PROGRESS_BAR_FULL)发送消息。MSG_PROGRESS_BAR_FULL消息会被主线程的Handler函数捕获并处理:隐藏“进度条”,然后终止线程。

    layout文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        
       <!-- 
        ProgressBar的style可以如下:
        Widget.ProgressBar.Horizontal
        Widget.ProgressBar.Small
        Widget.ProgressBar.Large
        Widget.ProgressBar.Inverse
        Widget.ProgressBar.Small.Inverse
        Widget.ProgressBar.Large.Inverse   
        -->
        <ProgressBar
            android:id="@+id/pbar_def"
            android:layout_width="600px"
            android:layout_height="wrap_content"
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:max="100"
            android:progress="10"
        />
    
    
    </LinearLayout>

    style="@android:style/Widget.ProgressBar.Horizontal"
    style的值可以为以下任意一个值:
    Widget.ProgressBar.Horizontal
    Widget.ProgressBar.Small
    Widget.ProgressBar.Large
    Widget.ProgressBar.Inverse
    Widget.ProgressBar.Small.Inverse
    Widget.ProgressBar.Large.Inverse


    manifest文件

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.skywang.control"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.skywang.control.ProcessBarTest"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>

    点击下载:源代码

    运行效果:如图

  • 相关阅读:
    在maven工程指定java版本并指定编码格式
    Spring boot 静态资源访问
    Spring Boot 11 : Redis
    Java 计算均值
    Spring Boot 12 : AOP
    Spring Boot 11 : 配置文件读取
    Java文本标签处理
    Spring Boot 10:处理Json数据中的null值
    Spring Cloud 7:Gateway
    Spring Cloud 6:服务消费
  • 原文地址:https://www.cnblogs.com/skywang12345/p/3123403.html
Copyright © 2011-2022 走看看