zoukankan      html  css  js  c++  java
  • Android零基础入门第51节:进度条ProgressBar

       不知不觉这已经是第51期了,在前面50期我们学了Android开发中使用频率非常高的一些UI组件,当然这些组件还不足够完成所有APP的开发,还会经常用到一些诸如进度条、拖动条、搜索框、时间和日期选择器等组件,那么后面几期就来一起学习这些高级组件。

    一、ProgressBar系列组件

        ProgressBar也是一组重要的组件,ProgressBar本身代表了进度条组件,它还派生了两个常用的组件:SeekBar和RatingBar。ProgressBar及其子类在用法上十分相似,只是显示界面有一定的区别,因此本节把它们归为一类,针对它们的共性集中讲解,并突出介绍它们的区别。

        ProgressBar及其子类的类图如下图所示:

        ProgressBar继承于View类,直接子类有AbsSeekBar和ContentLoadingProgressBar, 其中AbsSeekBar的子类有SeekBar和RatingBar,可见这二者是基于ProgressBar实现的。

    二、ProgressBar基础

        进度条也是UI界面中一种非常实用的组件,通常用于向用户显示某个耗时操作完成的百分比。

        进度条可以动态地显示进度,因此避免长时间地执行某个耗时操作时,让用户感觉程序失去了响应,从而更好地提高用户界面的友好性。

        Android支持多种风格的进度条,通过style属性可以为ProgressBar指定风格。该属性可支持如下几个属性值:

    • @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:小环形进度条。

        其实在Android开发中,ProgressBar的样式设定有两种方式,除了上面这种,还有一种可以通过如下方式使用:

    • ?android:attr/progressBarStyle

    • ?android:attr/progressBarStyleHorizontal

    • ?android:attr/progressBarStyleInverse

    • ?android:attr/progressBarStyleLarge

    • ?android:attr/progressBarStyleLargeInverse

    • ?android:attr/progressBarStyleSmall

    • ?android:attr/progressBarStyleSmallInverse

    • ?android:attr/progressBarStyleSmallTitle

        除此之外,ProgressBar还支持如下常用XML属性:

    • android:max:进度条的最大值。

    • android:progress:进度条已完成进度值。

    • android:progressDrawable:设置轨道对应的Drawable对象。

    • android:indeterminate:如果设置成true,则进度条不精确显示进度。

    • android:indeterminateDrawable:设置不显示进度的进度条的Drawable对象。

    • android:indeterminateDuration:设置不精确显示进度的持续时间。

    • android:secondaryProgress:二级进度条,类似于视频播放的一条是当前播放进度,一条是缓冲进度。

        其中android:progressDrawable用于指定进度条的轨道的绘制形式,该属性可指 定为一个LayerDrawable对象的引用。

        ProgressBar提供了如下方法来操作进度:

    • getMax():返回这个进度条的范围的上限。

    • getProgress():返回进度。

    • getSecondaryProgress():返回次要进度。

    • incrementProgressBy(int diff):指定增加的进度。为正数时进度增加;为负数时进度减少。

    • isIndeterminate():指示进度条是否在不确定模式下。

    • setIndeterminate(boolean indeterminate):设置是否为不确定模式。

    三、ProgressBar示例

        接下来通过一个简单的示例程序来学习系统默认ProgressBar的使用。

        从本期开始的高级UI组件部分使用新的模块来完成,可以参照初识ListView这期的创建方法,新建一个advancedviewsample模块。

        这个示例用户界面非常简单,新建程序对应的布局文件activity_main.xml的代码如所示:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical" >
    
        <!-- 系统提供的圆形进度条,依次是大中小 -->
        <ProgressBar
            style="@android:style/Widget.ProgressBar.Small"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <ProgressBar
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <ProgressBar
            style="@android:style/Widget.ProgressBar.Large"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
        <!--系统提供的水平进度条-->
        <ProgressBar
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:max="100"
            android:progress="18" />
    
        <ProgressBar
            style="@android:style/Widget.ProgressBar.Horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:indeterminate="true" />
    </LinearLayout>

        上面的界面布局文件中先定义了三个环形进度条,这种环形进度条无法显示进度,它只是显示一个不断旋转的图片。

        布局文件的后面定义的两个水平进度条,第一个进度条有设置进度值;第二个进度条不精确显示进度。

        程序其余地方不用修改,直接运行程序可以看到下图所示界面效果。

        从上图发现,这些进度条都不是很美观,而且也没法显示具体进度值,这就需要开发者自定义ProgressBar了,我们下期再来一同学习。

        今天就先到这里,如果有问题欢迎留言一起探讨,也欢迎加入Android零基础入门技术讨论微信群,共同成长!

       此文章版权为微信公众号分享达人秀(ShareExpert)——鑫鱻所有,若需转载请联系作者授权,特此声明!

    往期总结分享:

    Android零基础入门第1节:Android的前世今生

    Android零基础入门第2节:Android 系统架构和应用组件那些事

    Android零基础入门第3节:带你一起来聊一聊Android开发环境

    Android零基础入门第4节:正确安装和配置JDK, 高富帅养成第一招

    Android零基础入门第5节:善用ADT Bundle, 轻松邂逅女神

    Android零基础入门第6节:配置优化SDK Manager, 正式约会女神

    Android零基础入门第7节:搞定Android模拟器,开启甜蜜之旅

    Android零基础入门第8节:HelloWorld,我的第一趟旅程出发点

    Android零基础入门第9节:Android应用实战,不懂代码也可以开发

    Android零基础入门第10节:开发IDE大升级,终于迎来了Android Studio

    Android零基础入门第11节:简单几步带你飞,运行Android Studio工程

    Android零基础入门第12节:熟悉Android Studio界面,开始装逼卖萌

    Android零基础入门第13节:Android Studio配置优化,打造开发利器

    Android零基础入门第14节:使用高速Genymotion,跨入火箭时代

    Android零基础入门第15节:掌握Android Studio项目结构,扬帆起航

    Android零基础入门第16节:Android用户界面开发概述

    Android零基础入门第17节:文本框TextView

    Android零基础入门第18节:输入框EditText

    Android零基础入门第19节:按钮Button

    Android零基础入门第20节:复选框CheckBox和单选按钮RadioButton

    Android零基础入门第21节:开关组件ToggleButton和Switch

    Android零基础入门第22节:图像视图ImageView

    Android零基础入门第23节:图像按钮ImageButton和缩放按钮ZoomButton

    Android零基础入门第24节:自定义View简单使用,打造属于你的控件

    Android零基础入门第25节:简单且最常用的LinearLayout线性布局

    Android零基础入门第26节:两种对齐方式,layout_gravity和gravity大不同

    Android零基础入门第27节:正确使用padding和margin

    Android零基础入门第28节:轻松掌握RelativeLayout相对布局

    Android零基础入门第29节:善用TableLayout表格布局

    Android零基础入门第30节:两分钟掌握FrameLayout帧布局

    Android零基础入门第31节:少用的AbsoluteLayout绝对布局

    Android零基础入门第32节:新推出的GridLayout网格布局

    Android零基础入门第33节:Android事件处理概述

    Android零基础入门第34节:Android中基于监听的事件处理

    Android零基础入门第35节:Android中基于回调的事件处理

    Android零基础入门第36节:Android系统事件的处理

    Android零基础入门第37节:初识ListView

    Android零基础入门第38节:初识Adapter

    Android零基础入门第39节:ListActivity和自定义列表项

    Android零基础入门第40节:自定义ArrayAdapter

    Android零基础入门第41节:使用SimpleAdapter

    Android零基础入门第42节:自定义BaseAdapter

    Android零基础入门第43节:ListView优化和列表首尾使用

    Android零基础入门第44节:ListView数据动态更新

    Android零基础入门第45节:网格视图GridView

    Android零基础入门第46节:列表选项框Spinner

    Android零基础入门第47节:自动完成文本框AutoCompleteTextView

    Android零基础入门第48节:可折叠列表ExpandableListView

    Android零基础入门第49节:AdapterViewFlipper图片轮播

    Android零基础入门第50节:StackView卡片堆叠

  • 相关阅读:
    fork()
    定时器
    epoll函数
    select函数
    高性能服务器程序框架
    socker地址API
    点击选中/取消选中flag
    html5的视频和音频
    html5
    JavaScript的string方法(demo)
  • 原文地址:https://www.cnblogs.com/cqkxzsxy/p/7457644.html
Copyright © 2011-2022 走看看