您的位置:首页 > 其它

安卓高级组件----进度条

2017-02-28 20:23 447 查看
  进度条组件是安卓重要组件之一。当后台某个程序执行时,前台进度条动态显示了程序执行进度的百分比。是耗时较长的程序让用户觉得在自己的掌控之中,提高程序的友好型。
        安卓支支持几种风格的进度条,能通过style属性呢设置进度条风格,该属性如下:

        @android:style/Widget.ProgressBar.Horizontal    水平进度条

        @android:style/Widget.ProgressBar.Inverse        普通环形进度条

        @android:style/Widget.ProgressBar.Large           大环形进度条

        @android:style/Widget.ProgressBar.Large.Inverse   大环形进度条

        @android:style/Widget.ProgressBar.Small            小环形进度条

        @android:style/Widget.ProgressBar.Small.Inverse   小环形进度条

        同时,进度条在xml文件中还要如下属性:

        android:max          设置进度条最大值

        android:rpogress    指定进度条已经完成的进度值

        android:ProgressDrawable     指定进度条轨道的绘制形式

进度条组件有两个最常用的方法:setProgress()设置进度条已经完成的进度;incrementProgressBy()设置进度条进度增加或减少;参数是正数时增加,负数减少;

实例操作:下面我们实现视屏进度条和环形进度条

1.新建工程,在布局中添加两个进度条,一个为环形一个水平进度条

<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
android:layout_weight="1" />

<ProgressBar
android:id="@+id/progressBar2"
style="?android:attr/progressBarStyleSmall"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />


2.主活动中获取进度条,定义一个进度变量和消息处理Handler类对象

hp = (ProgressBar)findViewById(R.id.progressBar1);
cp = (ProgressBar)findViewById(R.id.progressBar2);
h = new Handler(){

@Override
public void handleMessage(Message msg) {
if(msg.what == 0x11){
hp.setProgress(progress);
}else {
Toast.makeText(MainActivity.this, "耗时完成", Toast.LENGTH_SHORT).show();        }
hp.setVisibility(View.GONE);
cp.setVisibility(View.GONE);
}
};


3.通过匿名内部类实例化消息处理Handler类对象,重写handlerMessage()方法。耗时没有完成时更新进度,耗时完成之后出现提示

h = new Handler(){

public void handleMessage(Message msg) {
if(msg.what == 0x11){
hp.setProgress(progress);
}else {
Toast.makeText(MainActivity.this, "耗时完成", Toast.LENGTH_SHORT).show();        }
hp.setVisibility(View.GONE);
cp.setVisibility(View.GONE);
}
}


4.开启线程耗时,sendMessage()发送处理消息

new Thread(new Runnable() {

@Override
public void run() {
while(true){
progress = doWork();
Message m = new Message();
if(progress <= 100){
m.what = 0x11;
h.sendMessage(m);
}else {
m.what = 0x10;
h.sendMessage(m);
break;
}
}

}

private int doWork(){
progress += Math.random()*10;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return progress;
}
}).start();


运行代码,可以看到环形进度条和水平进度条更新。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: