Android 高级控件学习--ProgressBar

Android 高级控件学习--ProgressBar

布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
  <ProgressBar
    android:id="@+id/ProgressBar01"
	style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:visibility="gone"
  />
  <ProgressBar 
  		android:id="@+id/ProgressBar02"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        style="?android:attr/progressBarStyleLarge"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="70"
		android:visibility="gone"
  />
  <Button
    android:id="@+id/Button01"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="开始" />
</LinearLayout>

源文件Activity01.java

package com.lxt008;

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

public class Activity01 extends Activity
{
	//声明ProgressBar对象
	private ProgressBar m_ProgressBar;
	private ProgressBar m_ProgressBar2;
	private Button mButton01;
	protected static final int GUI_STOP_NOTIFIER = 0x108;
	protected static final int GUI_THREADING_NOTIFIER = 0x109;
	public int intCounter=0;
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		//设置窗口模式,,因为需要显示进度条在标题栏
		requestWindowFeature(Window.FEATURE_PROGRESS);
		setProgressBarVisibility(true);
		setContentView(R.layout.main);
		
		//取得ProgressBar
		m_ProgressBar = (ProgressBar) findViewById(R.id.ProgressBar01);
		m_ProgressBar2= (ProgressBar) findViewById(R.id.ProgressBar02);
		mButton01 = (Button)findViewById(R.id.Button01); 
		
		m_ProgressBar.setIndeterminate(false);
		m_ProgressBar2.setIndeterminate(false);
		
		//当按钮按下时开始执行,
	    mButton01.setOnClickListener(new Button.OnClickListener()
	    {
	      @Override
	      public void onClick(View v)
	      {
	        // TODO Auto-generated method stub
	    	  
	    	  //设置ProgressBar为可见状态
	    	  m_ProgressBar.setVisibility(View.VISIBLE);
	    	  m_ProgressBar2.setVisibility(View.VISIBLE);
	    	  //设置ProgressBar的最大值
	    	  m_ProgressBar.setMax(100);
	    	  //设置ProgressBar当前值
	    	  m_ProgressBar.setProgress(0);
	    	  m_ProgressBar2.setProgress(0);

	    	  //通过线程来改变ProgressBar的值
				new Thread(new Runnable() {
					public void run()
					{
						for (int i = 0; i < 10; i++)
						{
							try
							{
								intCounter = (i + 1) * 20;
								Thread.sleep(1000);

								if (i == 4)
								{
									Message m = new Message();

									m.what = Activity01.GUI_STOP_NOTIFIER;
									Activity01.this.myMessageHandler.sendMessage(m);
									break;
								}
								else
								{
									Message m = new Message();
									m.what = Activity01.GUI_THREADING_NOTIFIER;
									Activity01.this.myMessageHandler.sendMessage(m);
								}
							}
							catch (Exception e)
							{
								e.printStackTrace();
							}
						}
					}
				}).start();
			}
		});
	}

	  Handler myMessageHandler = new Handler()
	  {
	    // @Override 
		  public void handleMessage(Message msg)
		  {
			  switch (msg.what)
			  {
			  //ProgressBar已经是对大值
			  case Activity01.GUI_STOP_NOTIFIER:
				  m_ProgressBar.setVisibility(View.GONE);
				  m_ProgressBar2.setVisibility(View.GONE);
				  Thread.currentThread().interrupt();
				  break;
			  case Activity01.GUI_THREADING_NOTIFIER:
				  if (!Thread.currentThread().isInterrupted())
				  {
					  // 改变ProgressBar的当前值
					  m_ProgressBar.setProgress(intCounter);
					  m_ProgressBar2.setProgress(intCounter);
					  
					  // 设置标题栏中前景的一个进度条进度值
					  setProgress(intCounter*100);
					  // 设置标题栏中后面的一个进度条进度值
					  setSecondaryProgress(intCounter*100);//
				  }
				  break;
			  }
			  super.handleMessage(msg);
		 }
	  };
}

一、xml中style属性为ProgressBar的样式风格

Android的ProgressBar样式:

style="?android:attr/progressBarStyleHorizontal" 长形进度条

style="?android:attr/progressBarStyleLarge" 超大号圆形

style="?android:attr/progressBarStyleSmall" 小号圆形

style="?android:attr/progressBarStyleSmallTitle" 标题型圆形


二、源文件中requestWindowFeature可以设置的值有:
1.DEFAULT_FEATURES:系统默认状态,一般不需要指定
2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定
3.FEATURE_CUSTOM_TITLE:自定义标题。当需要自定义标题时必须指定。如:标题是一个按钮时
4.FEATURE_INDETERMINATE_PROGRESS:不确定的进度
5.FEATURE_LEFT_ICON:标题栏左侧的图标
6.FEATURE_NO_TITLE:无标题
7.FEATURE_OPTIONS_PANEL:启用“选项面板”功能,默认已启用。
8.FEATURE_PROGRESS:进度指示器功能
9.FEATURE_RIGHT_ICON:标题栏右侧的图标

三、源文件中m_ProgressBar.setVisibility(View.VISIBLE);

setVisibility有三个参数:
VISIBLE:0  意思是可见的
INVISIBILITY:4 意思是不可见的,但还占着原来的空间
GONE:8  意思是不可见的,不占用原来的布局空间

四、源文件中设置ProgressBar相关字段

m_ProgressBar.setMax(100);//设置ProgressBar最大值
m_ProgressBar.setProgress(0);//设置ProgressBar当前值

五、线程

new Thread(new Runnable() {
                    public void run()
                    {

                    //try to do

                    }

}).start();

六、Handle与Message暂缓,暂时看做windowsapi里的Sendmessage

发布了30 篇原创文章 · 获赞 5 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章