进度条(ProgressBar)拖动条(SeekBar)android

本文源自http://www.cnblogs.com/TerryBlog/archive/2010/06/17/1759542.html

进度条(ProgressBar)

当一个应用程序在后台执行时,前台界面不会产生变化,但因为Android各机型配置大不相同,有时执行程序的过程中用户不知道发生了什么事,但界面却发生了变化。这时需要与用户交互的进度条用来提示用户后台执行程序的进度,这种做法是符合人性化的,进度条充分的符合上面的需求。进度条的详解如下:

1、进度条风格

2、进度条主要属性方法

3、模拟程序运行,使用进度条

1、进度条分类

长形进度条(progressBarStyleHorizontal)

大圆形进度条(progressBarStyleLarge)

小圆形进度条(progressBarStyleSmall)

默认风格(progressBarStyle)

大致的使用场景为:比如,应用程序装载资源或者网络连接。下面介绍如何在xml中声明其中两种典型的进度条,先看一段布局

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns: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"

/>

<ProgressBarandroid:id="@+id/ProgressBar01"android:layout_width="200dp"

style="?android:attr/progressBarStyleHorizontal"

android:layout_height="wrap_content"

android:indeterminate="false"

android:visibility="gone"

></ProgressBar>

<ProgressBarandroid:id="@+id/ProgressBar02"android:layout_width="wrap_content"

android:max="100"

style="?android:attr/progressBarStyleLarge"

android:progress="50"android:secondaryProgress="70"

android:indeterminate="false"

android:visibility="gone"

android:layout_height="wrap_content"></ProgressBar>

<Buttonandroid:text="开始"android:id="@+id/Button01"

android:layout_width="wrap_content"android:layout_height="wrap_content"></Button>

</LinearLayout>

清单中,ProgressBar01为长形进度条,ProgressBar02为大圆形进度条,使用方法为声明“style=”在样式上加上各自属性,加载即可。

2、进度条主要属性方法

indeterminate

进度条分不确定(indeterminate=true)和确定(indeterminate=false)2种,默认值是(indeterminate=true)不确定

setMax

设置进度条的最大值,同时,确定(indeterminate=false)进度条中的最大值的设定,将调用setMax()方法。

setProgress

Android进度条中当前进度值的设置。

setSecondaryProgress

第二进度条的设置。

setVisibility

设置可见性。

3、模拟程序运行,使用进度条

界面布局引用上面XML布局文件,现在开始程序的实现步骤了:程序加载时,设置两个进度条的当前进度值为0,从0开始到Max值100,的数值做递值相加,用户点击按钮时,模拟程序运行时间,起动一个线程为进度条的Progress赋值。这里我们需要借助线程和消息机制帮我们实现数值累加的效果,在消息里面当接收到的消息符合我们条件判断隐藏进度条的运行。具体业务逻辑代码如下:

模拟程序运行线程代码如下:

newThread(newRunnable(){

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

for(inti=0;i<10;i++)

{

try{

counter=(i+1)*20;

Thread.sleep(1000);

if(i==4)

{

Messagemsg=newMessage();

msg.what=GUI_STOP;

progressBarActivity.this.myHandler.sendMessage(msg);

break;

}

else

{

Messagemsg=newMessage();

msg.what=GUI_THREADING;

progressBarActivity.this.myHandler.sendMessage(msg);

}

}catch(Exceptione){

//TODO:handleexception

e.printStackTrace();

}

}

}

}).start();

消息处理代码如下: 

myHandler=newHandler()

{

@Override

publicvoidhandleMessage(Messagemsg){

//TODOAuto-generatedmethodstub

switch(msg.what){

caseGUI_STOP:

myBar.setVisibility(View.GONE);

myBar2.setVisibility(View.GONE);

Thread.currentThread().interrupt();

break;

caseGUI_THREADING:

if(!Thread.currentThread().interrupted())

{

myBar.setProgress(counter);

myBar2.setProgress(counter);

setProgress(counter*100);

setSecondaryProgress(counter*100);

}

break;

default:

break;

}

super.handleMessage(msg);

}

};

具体线程和消息机制的使用方法你可以参照:Android小項目之---時間線程應用(附源碼)或者Android小項目之--消息、線程、動畫顯示圖片(附源碼)线程和消息机制这两个知识点,必须掌握好,在项目中会经常使用到。具体的代码流程如下:

进度条完整代码参考

运行效果如图:

拖动条(SeekBar)

听歌的时候,我们常常喜欢快进或者退回某一时间段,听歌的时候,我们喜欢控件音量大小来听歌。做为与用户交互密切的另外一个控件SeekBar拖动条,可以让用户拖动达到用户需要的效果的控件,在无外乎大大提高用户的体验。下面我们来讲讲此拖动条。

1、拖动条的事件。

2、拖动条的主要属性和方法。

3、模拟方式实现手动的动作。

1、拖动条的事件

由于拖动条可以被用户控制。所以需要对其进行事件监听,这就需要实现SeekBar.OnSeekBarChangeListener接口。此接口共需要监听三个事件,分别是:

数值改变(onProgressChanged)

开始拖动(onStartTrackingTouch)

停止拖动(onStopTrackingTouch)

2、拖动条的主要属性和方法

setMax

设置拖动条的数值

setProgress

设置拖动条当前的数值

setSeconddaryProgress

设置第二拖动条的数值,即当前拖动条推荐的数值

3、模拟方式实现手动的动作

程序中模仿了用户拖动拖动条的过程,对三个事件分别作了讯录,

相关推荐