`

玩转Andorid---UI篇---两种进度条(ProgressBar)

阅读更多

在执行一些后台操作的时候,比如加载游戏,播放歌曲时,用户根本不知道程序执行的进度情况,这时候,可以使用进度条来显示这些进度

Andorid系统提供两种进度条,长条形进度条(progressBarStyleHorizontal)和圆形进度条(progressBarStyleLarge),Android平台默认的进度条是第二种。另外,还可以在窗体的标题栏设置进度条,这就需要先对窗体的显示风格进行设置“requestWindowFeature(Window.FEATURE_PROGRESS)”;如果要显示这个进度条,还要使用setProgressBarVisibility(true);方法来使其显示

 

下面是个例子,分别由标题栏进度条,长条形进度条和圆形进度条组成,并用线程控制。

注意:圆形进度条是不会显示具体的进度的,而只是单纯的旋转

 

package org.hualang.progress;

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 ProgressBarTest extends Activity
{
	//声明ProgressBar对象
	private ProgressBar pro1;
	private ProgressBar pro2;
	private Button btn;
	protected static final int STOP_NOTIFIER = 000;
	protected static final int THREADING_NOTIFIER = 111;
	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
		pro1 = (ProgressBar) findViewById(R.id.progress1);
		pro2= (ProgressBar) findViewById(R.id.progress2);
		btn = (Button)findViewById(R.id.button); 
		//设置进度条是否自动运转,即设置其不确定模式,false表是不自动运转
		pro1.setIndeterminate(false);
		pro2.setIndeterminate(false);
		
		//当按钮按下时开始执行,
	    btn.setOnClickListener(new Button.OnClickListener()
	    {
	      @Override
	      public void onClick(View v)
	      {
	        // TODO Auto-generated method stub
	    	  
	    	  //设置ProgressBar为可见状态
	    	  pro1.setVisibility(View.VISIBLE);
	    	  pro2.setVisibility(View.VISIBLE);
	    	  //设置ProgressBar的最大值
	    	  pro1.setMax(100);
	    	  //设置ProgressBar当前值
	    	  pro1.setProgress(0);
	    	  pro2.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 = ProgressBarTest.STOP_NOTIFIER;
									ProgressBarTest.this.myMessageHandler.sendMessage(m);
									break;
								}
								else
								{
									Message m = new Message();
									m.what = ProgressBarTest.THREADING_NOTIFIER;
									ProgressBarTest.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 ProgressBarTest.STOP_NOTIFIER:
				  pro1.setVisibility(View.GONE);
				  pro2.setVisibility(View.GONE);
				  Thread.currentThread().interrupt();
				  break;
			  case ProgressBarTest.THREADING_NOTIFIER:
				  if (!Thread.currentThread().isInterrupted())
				  {
					  // 改变ProgressBar的当前值
					  pro1.setProgress(intCounter);
					  pro2.setProgress(intCounter);
					  
					  // 设置标题栏中前景的一个进度条进度值
					  setProgress(intCounter*100);
					  // 设置标题栏中后面的一个进度条进度值
					  setSecondaryProgress(intCounter*100);//
				  }
				  break;
			  }
			  super.handleMessage(msg);
		 }
	  };
}

 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="进度条实例演示"
    />
<ProgressBar
	android:id="@+id/progress1"
	style="?android:attr/progressBarStyleHorizontal"---设置进度条为长条形
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:visibility="gone"---设置其不可见
/>
<ProgressBar
	android:id="@+id/progress2"
	style="?android:attr/progressBarStyleLarge"---设置进度条为圆形进度条
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:max="100"---设置其最大值
	android:progress="50"---设置当前进度值
	android:secondaryProgress="70"---设置次要进度值
	android:visibility="gone"
/>
<Button
	android:id="@+id/button"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:text="启动进度条"
/>
</LinearLayout>

 运行结果如下:



 点击启动进度条按钮后,进度条将自动运行



 当结束时,自动退出进度条程序,返回第一个图片的样子

  • 大小: 10.3 KB
  • 大小: 12.4 KB
  • 大小: 12.3 KB
分享到:
评论

相关推荐

    Android---UI篇

    •Andorid---UI篇---两种进度条(ProgressBar) • •Android---UI篇---Dialog(对话框) • •Android---UI篇---AutoCompleteTextView(自动提示) • •Android---UI篇---Toast(提示) • •Android---UI篇---...

    andorid-sdk-windows.tools

    android, sdk, andorid-sdk_r17-windows, tools ,解压放到andorid-sdk_r-windows目录下。配合platform-tools, ADT-17使用

    andorid-check-system.rar_教室管理系统

    本文将深入解析这个名为"andorid-check-system.rar"的项目,从核心功能、设计架构到实现细节进行详细阐述。 首先,该系统设定为两个主要角色:服务端管理员和客户端用户。服务端管理员具有高级权限,负责维护整个...

    andorid-饼状图.rar

    本文将深入探讨如何在Android应用中创建和使用饼状图,基于提供的"andorid-饼状图.rar"压缩包,我们可以假设其中包含了一个用于实现饼状图的示例代码或库。 首先,Android饼状图通常通过第三方库实现,如`...

    andorid-饼图API.rar

    "andorid-饼图API.rar"这个压缩包很可能包含了一个用于绘制饼图的Android库,可能是开发者已经封装好的类或者组件。 Android饼图API的关键知识点包括以下几个方面: 1. **绘图库选择**:Android官方SDK并没有直接...

    andorid-背景改变摇晃手机感应.rar

    在Android平台上,开发一...以上就是"andorid-背景改变摇晃手机感应"项目涉及到的主要技术点,这个压缩包文件应该包含了实现这个功能的代码示例,通过学习和实践,你可以深入理解Android传感器和UI动态变化的相关知识。

    andorid-wifi检测.zip

    "andorid-wifi检测.zip"这个压缩包很可能包含了用于检查和分析Android设备WiFi性能的工具或代码库。以下是一些可能包含在其中的关键知识点: 1. **WiFi扫描与连接**:在Android系统中,可以通过调用`WifiManager`类...

    andorid-猜拳游戏.rar

    - 游戏逻辑是程序的核心部分,涉及到两个玩家(用户和系统)的选择比较。 - 使用Java或Kotlin编程语言编写处理逻辑,系统选择通过生成0(石头)、1(剪刀)、2(布)的随机数来实现。 - 当用户点击按钮时,获取...

    andorid- 多线程

    - **IntentService**:一种特殊的服务,它可以自动管理自己的生命周期,并将任务分配到工作线程中执行。IntentService非常适合处理异步请求,比如下载文件或发送网络请求,它会在处理完所有请求后自动关闭自身,避免...

    基于TINY4412的Andorid开发-------简单的LED灯控制源代码

    性能优化方面,应注意减少不必要的数据传输,合理安排线程以避免阻塞UI。 通过这个项目,开发者可以学习到Android平台与嵌入式硬件的集成,提升跨平台开发能力,同时加深对硬件控制和物联网应用的理解。

    andorid-饼图带引导线.rar

    在“andorid-饼图带引导线.rar”这个压缩包中,我们很显然关注的是如何在Android应用中实现具有引导线功能的饼图。引导线在饼图中的作用是帮助用户更好地理解数据点所代表的信息,它可以指示从饼图的一个扇区到相...

    andorid-TAB界面(滑动切换).zip

    在Android开发中,创建一个可滑动切换的TAB界面是一项常见的需求,这通常涉及到用户界面(UI)设计和页面导航。Android提供了多种方式来实现这样的功能,例如使用`ViewPager`配合`TabLayout`,或者自定义控件。在这个...

    Android代码-Andorid-LiteHybrid-WebView

    其代码分两部分,litehybird 为框架代码。 主工程 为示例代码, 原理: 1. 封装原生 webview,使用 WebViewClient 与 WebChromeClient 2. H5 调用 Native 采用 js prompt 方式 3. Native 调用 H5 采用 loadurl API ...

    andorid-饼图&柱状图.rar

    下面我们将详细探讨这两种图表在Android开发中的应用和实现方式。 首先,饼图是一种展示数据比例关系的图形,常用于表示整体与部分之间的关系。在Android中,我们可以使用开源库如MPAndroidChart来创建饼图。...

    andorid-捕鱼达人源代码.rar

    1. **游戏框架结构**:捕鱼达人源代码首先会展示一个完整的游戏项目结构,包括各个模块的划分,如UI界面、数据管理、网络通信、游戏逻辑等。这有助于我们了解如何构建大型的Android应用。 2. **游戏场景与对象管理*...

    andorid-tabHost展示数据listview.rar

    在本例中,“tabHost展示数据listview”可能包含了两个部分:一个是TabHost的布局,用于展示多个Tab;另一个是ListView的布局,用于在每个Tab内展示数据。开发者可能通过Adapter将数据绑定到ListView,实现Tab间的...

    安卓java读取网页源码-Andorid-learning:Andorid-学习

    Andorid-learning 目录: 0-0 0-1 1-1 1-2 1-3 1-4 0-0 隐藏顶部栏状态栏 在代码 oncreate: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ...

    andorid-HTML5.zip_android_android html5_html5_html5 android_查询 h

    这个名为"andorid-HTML5.zip"的压缩包显然包含了一些关于如何在Android平台上利用HTML5技术来实现机票查询界面的资源。让我们深入探讨一下这个主题。 HTML5是一种超文本标记语言的最新版本,它引入了许多新特性,如...

    android mail必备jar包(mail.jar,activation.jar,additionnal.jar三件套)

    在Android应用开发中,有时我们需要实现邮件功能,例如发送通知、报告或用户反馈。为了实现这一功能,开发者通常会依赖于JavaMail API。在提供的压缩包文件中,包含的`mail.jar`,`activation.jar`和`additionnal....

    andorid-26

    2. **自动填充**:系统提供了一种自动填充框架,让应用能利用保存在设备上的登录凭据,简化用户输入,提高用户体验。 3. **画中画模式**(Picture-in-Picture, PiP):在Android 8.0上,支持视频和其他类型的内容在...

Global site tag (gtag.js) - Google Analytics