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>

    点击下载:源代码

    运行效果:如图

  • 相关阅读:
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 88怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 81.0怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 40怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 24.0怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 21.0怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下驱动器试运行提示过速度保护怎么办
    倍福TwinCAT(贝福Beckhoff)基础教程 松下驱动器如何执行绝对值清零
    倍福TwinCAT(贝福Beckhoff)基础教程 松下绝对值驱动器如何做初始化设置
    倍福TwinCAT(贝福Beckhoff)基础教程 松下官方软件开启报错伺服未就绪怎么办
    JAVA Eclipse 启动 Eclipse 弹出“Failed to load the JNI shared library jvm_dll”怎么办
  • 原文地址:https://www.cnblogs.com/skywang12345/p/3123403.html
Copyright © 2011-2022 走看看