文档章节

Android实用笔记——使用ProgressBar实现进度条

Kerwin_zZ
 Kerwin_zZ
发布于 2016/07/27 01:39
字数 1940
阅读 830
收藏 0

1、ProgressBar的分类

    可以精确显示进度(可以显示刻度或者精确百分比)

    不可以精确显示精度(一直转,类似于一个过场动画)

 

2、关键属性和方法

    指定ProgressBar显示风格

        style="?android:attr/progressBarStyleLarge"    大环形进度条

        style="?android:attr/progressBarStyleSmall"    小环形进度条

        style="?android:attr/progressBarStyleHorizontal"    水平进度条

    ProgressBar的关键属性

        android:max="100"    最大显示进度

        android:progress="50"    第一显示进度

        android:secondaryProgress="80"    第二显示进度

        android:indenterminate="true"    设置是否精确显示(true表示不精确显示进度,false表示精确显示进度)

    ProgressBar的关键方法

        setProgress(int)    设置第一进度

        setSecondaryProgress(int)    设置第二进度

        setProgress()    获取第一进度

        getSecondaryProgress()    获取第二进度

        incrementProgressBy(int)    增加或减少第一进度

        incrementSecondaryProgressBy(int)    增加或减少第二进度

        getMax()    获取最大进度

 

3、标题栏中的ProgressBar

package com.example.myandroidprogressbar;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.Window;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //1、启用窗口特征,启用带进度何不带进度的两种进度条
        requestWindowFeature(Window.FEATURE_PROGRESS);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
        
        setContentView(R.layout.activity_main);
        
        //显示两种进度条
        setProgressBarVisibility(true);
        setProgressBarIndeterminateVisibility(true);
        //Max=10000
        setProgress(600);
    }
}

    

4、界面中四种不同形式的进度条

    修改activity_main.xml文件如下

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ProgressBar
        android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />

    <ProgressBar
        android:id="@+id/progressBar2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/progressBar1"
        android:layout_toRightOf="@+id/progressBar1" />
    
    <ProgressBar
        android:id="@+id/progressBar3"
        style="?android:attr/progressBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/horiz"
        android:layout_toRightOf="@+id/progressBar2" />

    <ProgressBar
        android:id="@+id/horiz"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/progressBar1"
        android:layout_below="@+id/progressBar1"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="80" />
      
</RelativeLayout>

 

5、通过按钮改变进度条的数值并动态改变

    修改activity_main.xml文件

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ProgressBar
        android:id="@+id/horiz"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="80" />
    
    <Button
        android:id="@+id/add"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/horiz"
        android:layout_below="@+id/horiz"
        android:text="@string/add" />

    <Button
        android:id="@+id/reduce"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@+id/add"
        android:layout_below="@+id/add"
        android:text="@string/reduce" />

    <Button
        android:id="@+id/reset"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/reduce"
        android:layout_below="@+id/reduce"
        android:text="@string/reset" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/reset"
        android:layout_alignRight="@+id/horiz"
        android:layout_below="@+id/reset"
        android:layout_marginTop="16dp" />


</RelativeLayout>

    修改MainActivity.java文件

package com.example.myandroidprogressbar;

import android.os.Bundle;
import android.R.integer;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener{
	//1、声明部分控件
	private ProgressBar progress;
	private Button add;
	private Button reduce;
	private Button reset;
	private TextView text;	
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
        
        setContentView(R.layout.activity_main);

        //2、初始化控件
        init();
    }

	private void init() {
		// TODO Auto-generated method stub
		//3、绑定
		progress=(ProgressBar) findViewById(R.id.horiz);
		add=(Button) findViewById(R.id.add);
		reduce=(Button) findViewById(R.id.reduce);
		reset=(Button) findViewById(R.id.reset);
		text=(TextView) findViewById(R.id.text);
		
		//4、获取各进度条进度
		//获取第一进度条的进度
		//int first=progress.getProgress();
		//湖区第二进度条的进度
		//int second=progress.getSecondaryProgress();
		//获取进度条的最大进度
		//int max=progress.getMax();
		//5、将数据显示到textView中
		//text.setText("第一进度的百分比:"+(int)(first/(float)max*100)+
				//"% 第二进度的百分比:"+(int)(second/(float)max*100)+"%");
		add.setOnClickListener(this);
		reduce.setOnClickListener(this);
		reset.setOnClickListener(this);
	}

	//6、设置按钮点击响应事件,改变进度条数据
	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch(v.getId()){
		case R.id.add:
			//增加第一进度和第二进度10个刻度
			progress.incrementProgressBy(10);
			progress.incrementSecondaryProgressBy(10);
			break;
			
		case R.id.reduce:
			//减少第一进度和第二进度10个刻度
			progress.incrementProgressBy(-10);
			progress.incrementSecondaryProgressBy(-10);
			break;
			
		case R.id.reset:
			//重置
			progress.setProgress(50);
			progress.setSecondaryProgress(80);		
			break;
			
		}
		//7、因为每一次点击都会调用onClick这个函数,并且一定会执行switch这个判断。
		//所以没必要在每一个分支中刷新textView的内容,只需要在switch分支外面写就好了,
		//之前的向textView中写入数据的应该注释掉
		text.setText("第一进度的百分比:"+(int)(progress.getProgress()/(float)progress.getMax()*100)+
				"% 第二进度的百分比:"+(int)(progress.getSecondaryProgress()/(float)progress.getMax()*100)+"%");
	}
}

 

6、对话框形式的进度条(ProgressDialog)

    修改activity_main.xml文件

<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="86dp"
        android:text="显示进度条对话框" />

</RelativeLayout>

    修改MainActivity.java文件

package com.example.myandroidprogressdialog;

import android.os.Bundle;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
	//1、声明progressDialog的对象以及按钮
	private ProgressDialog prodialog;
	private Button show;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        init();
    }

	private void init() {
		// TODO Auto-generated method stub
		//2、绑定
		show=(Button) findViewById(R.id.show);
		//3、设置监听器
		show.setOnClickListener(this);
	}

	@Override
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
		//4、设置页面显示风格
		//新建progressDialog对象
		prodialog=new ProgressDialog(MainActivity.this);
		//给对话框设置显示风格
		prodialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
		//设置标题
		prodialog.setTitle("哈哈哈");
		//设置对话框里的而文字信息
		prodialog.setMessage("我好聪明啊");
		//设置图标
		prodialog.setIcon(R.drawable.ic_launcher);
		
		//5、设定关于progressBar的一些属性
		//设定最大进度
		prodialog.setMax(100);
		//设定初始化进度
		prodialog.incrementProgressBy(50);
		//进度条是明确显示进度的
		prodialog.setIndeterminate(false);
		
		//6、设定一个确定按钮
		prodialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// TODO Auto-generated method stub
				Toast.makeText(MainActivity.this,"快点爱上我", Toast.LENGTH_SHORT);
			}
		});
		
		//7、是否可以通过返回按钮退出对话框
		prodialog.setCancelable(true);
		
		//8、显示progressDialog
		prodialog.show();
	}
    
}

 

7、自定义ProgressBar的样式

    首先我们需要知道系统预定义的水平进度条的样式是如何加载的。这样我们需要回到activity_main.xml文件中来。

    我们注意到下面一行代码:

        style="?android:attr/progressBarStyleHorizontal"

    事实上,他真正的加载文件位于

        style="@android:style/Widget.ProgressBar.Horizontal"

    我们通过ctrl+鼠标左键点击引号中的位置,就可以看到系统自带的横向进度条的样式

    <style name="Widget.ProgressBar.Horizontal">
        <item name="android:indeterminateOnly">false</item>
        <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
        <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
        <item name="android:minHeight">20dip</item>
        <item name="android:maxHeight">20dip</item>
        <item name="android:mirrorForRtl">true</item>
    </style>

    其中的android:progressDrawable可以去加载一个自己自定义的布局样式的一个文件。我们同样用ctrl+鼠标左键打开这里的样式文件,看看系统是如何设定的

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--背景  -->
    <item android:id="@android:id/background">
        <shape>
            <!--圆角  -->
            <corners android:radius="5dip" />
            <!--渐变色  -->
            <gradient
                    <!--起始颜色  -->
                    android:startColor="#ff9d9e9d"
                    <!--中间颜色  -->
                    android:centerColor="#ff5a5d5a"
                    android:centerY="0.75"
                    <!--终止颜色  -->
                    android:endColor="#ff747674"
                    android:angle="270"
            />
        </shape>
    </item>
    
    <!--第二进度条  -->
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android:startColor="#80ffd300"
                        android:centerColor="#80ffb600"
                        android:centerY="0.75"
                        android:endColor="#a0ffcb00"
                        android:angle="270"
                />
            </shape>
        </clip>
    </item>
    
    <!--第一进度条  -->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android:startColor="#ffffd300"
                        android:centerColor="#ffffb600"
                        android:centerY="0.75"
                        android:endColor="#ffffcb00"
                        android:angle="270"
                />
            </shape>
        </clip>
    </item>
    
</layer-list>

    不难发现,我们可以自己对他的颜色进行修改,以达到自定义的目的。这里我简单把颜色修改了一下

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--背景  -->
    <item android:id="@android:id/background">
        <shape>
            <!--圆角  -->
            <corners android:radius="5dip" />
            <!--渐变色  -->
            <gradient
                    <!--起始颜色  -->
                    android:startColor="#B9A4FF"
                    <!--中间颜色  -->
                    android:centerColor="#C6B7FF"
                    android:centerY="0.75"
                    <!--终止颜色  -->
                    android:endColor="#C3B2FF"
                    android:angle="270"
            />
        </shape>
    </item>
    
    <!--第二进度条  -->
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android:startColor="#57E8FF"
                        android:centerColor="#74EBFF"
                        android:centerY="0.75"
                        android:endColor="#8EEFFF"
                        android:angle="270"
                />
            </shape>
        </clip>
    </item>
    
    <!--第一进度条  -->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="5dip" />
                <gradient
                        android:startColor="#ffffd300"
                        android:centerColor="#ffffb600"
                        android:centerY="0.75"
                        android:endColor="#ffffcb00"
                        android:angle="270"
                />
            </shape>
        </clip>
    </item>
    
</layer-list>

    运行即可得到自定义进度条的结果,可自行与本文之前的截图对比,可以看到很明显的差别,尽管颜色丑了点。

    希望大家能以小见大,做一些更有意思的尝试。

© 著作权归作者所有

Kerwin_zZ
粉丝 10
博文 119
码字总数 154287
作品 0
海淀
项目经理
私信 提问
一起学Android之ProgressBar

本文简述在Android开发中进度条(ProgressBar)的常见应用,仅供学习分享使用。 概述 在Android开发中,进度条的使用场景有很多,如播放电影时可拖动的观看进度条,评分时使用的评分条,上传下...

Alan.hsiang
01/05
0
0
Android 第十二课——UI ProgressBar

Android UI 图: 7 ProgressBar 进度条视图,这种视图有两种方式展示,一种是不知道什么时候可以结束的旋转视图展示,例如我们web后台请求是根本不知道后台什么时候可以返回数据;一种是进度...

learn_more
2015/01/11
205
0
【详解】Android ProgressBar ProgressDialog 进度条 进度条对话框

多式样ProgressBar 普通圆形ProgressBar 该类型进度条也就是一个表示运转的过程,例如发送短信,连接网络等等,表示一个过程正在执行中。 一般只要在XML布局中定义就可以了。 此时,没有设置...

迷途d书童
2012/02/11
36K
2
进度条(ProgressBar)——Mars Android开发视频之第一季第十七集(重)

1· Android中的进度条 安卓四大类进度条: 默认 传统进度条 播放进度条 评分进度条 2· 各种进度条之间的关系 所有进度条都继承自ProgressBar 3· ProgressBar进度条的风格 默认的风格 水平...

周田
2015/08/22
176
0
Android组件(三)

Progress(进度条):打开文件等的进度显示,用以给用户提示。其中最常见的两种是“环形进度条”和“水平进度条”。如下图所示: 代码如下: 这里介绍进度条事件的两种方法,一种是Activity直...

晨曦之光
2012/05/16
110
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Alibaba 实战(二) - 关于Spring Boot你不可不知道的实情

0 相关源码 1 什么是Spring Boot 一个快速开发的脚手架 作用 快速创建独立的、生产级的基于Spring的应用程序 特性 无需部署WAR文件 提供starter简化配置 尽可能自动配置Spring以及第三方库 ...

JavaEdge
今天
7
0
TensorFlow 机器学习秘籍中文第二版(初稿)

TensorFlow 入门 介绍 TensorFlow 如何工作 声明变量和张量 使用占位符和变量 使用矩阵 声明操作符 实现激活函数 使用数据源 其他资源 TensorFlow 的方式 介绍 计算图中的操作 对嵌套操作分层...

ApacheCN_飞龙
今天
7
0
五、Java设计模式之迪米特原则

定义:一个对象应该对其他对象保持最小的了解,又叫最小知道原则 尽量降低类与类之间的耦合 优点:降低类之间的耦合 强调只和朋友交流,不和陌生人说话 朋友:出现在成员变量、方法的输入、输...

东风破2019
昨天
23
0
jvm虚拟机结构

1:jvm可操作数据类型分为原始类型和引用类型,因此存在原始值和引用值被应用在赋值,参数,返回和运算操作中,jvm希望在运行时 明确变量的类型,即编译器编译成class文件需要对变量进行类型...

xpp_ba
昨天
5
0
聊聊nacos Service的processClientBeat

序 本文主要研究一下nacos Service的processClientBeat Service.processClientBeat nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/core/Service.java public class Service ex......

go4it
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部