Android ProgressBar控件理解

最近总结了一下ProgressBar控件,参考了许多人的博客,在此一并感谢


Android支持的几种风格的进度条:

不设置 style 表现形式为默认的中型大小的进度条(普通性的进度条)

style="@android:style/Widget.ProgressBar.Inverse"   普通大小进度条(反向的)

style="@android:style/Widget.ProgressBar.Large"  大进度条

style="@android:style/Widget.ProgressBar.Large.Inverse" 大进度条(反向的)

style="@android:style/Widget.ProgressBar.Small"  小进度条

style="@android:style/Widget.ProgressBar.Small.Inverse"  小进度条(反向的)

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

前六个进度条的样式为 圆圈 样式的,分为 正向转 和 反向转 两种
最后一种为水平进度条

在 SDK 中  sdk\platforms\android-7\data\res\values\styles.xml 文件下,系统提供的集中 ProgressBar 样式

    <style name="Widget.ProgressBar">
        <item name="android:indeterminateOnly">true</item>
        <item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item>
        <item name="android:indeterminateBehavior">repeat</item>
        <item name="android:indeterminateDuration">3500</item>
        <item name="android:minWidth">48dip</item>
        <item name="android:maxWidth">48dip</item>
        <item name="android:minHeight">48dip</item>
        <item name="android:maxHeight">48dip</item>
    </style>

    <style name="Widget.ProgressBar.Large">
        <item name="android:indeterminateDrawable">@android:drawable/progress_large_white</item>
        <item name="android:minWidth">76dip</item>
        <item name="android:maxWidth">76dip</item>
        <item name="android:minHeight">76dip</item>
        <item name="android:maxHeight">76dip</item>
    </style>
   
    <style name="Widget.ProgressBar.Small">
        <item name="android:indeterminateDrawable">@android:drawable/progress_small_white</item>
        <item name="android:minWidth">16dip</item>
        <item name="android:maxWidth">16dip</item>
        <item name="android:minHeight">16dip</item>
        <item name="android:maxHeight">16dip</item>
    </style>

    <style name="Widget.ProgressBar.Inverse">
        <item name="android:indeterminateDrawable">@android:drawable/progress_medium</item>
    </style>

    <style name="Widget.ProgressBar.Large.Inverse">
        <item name="android:indeterminateDrawable">@android:drawable/progress_large</item>
    </style>

    <style name="Widget.ProgressBar.Small.Inverse">
        <item name="android:indeterminateDrawable">@android:drawable/progress_small</item>
    </style>
   
    <style name="Widget.ProgressBar.Small.Title">
        <item name="android:indeterminateDrawable">@android:drawable/progress_small_titlebar</item>
    </style>

    <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>
    </style>

    progress_indeterminate_horizonta.xml中的内容

 <animation-list
         xmlns:android="http://schemas.android.com/apk/res/android"
         android:oneshot="false">
     <item android:drawable="@drawable/progressbar_indeterminate1" android:duration="200" />
     <item android:drawable="@drawable/progressbar_indeterminate2" android:duration="200" />
     <item android:drawable="@drawable/progressbar_indeterminate3" android:duration="200" />
 </animation-list>

以上的style为系统提供的默认进度条的样式。
ProgressBar   该控件默认的样式为圆形进度条,Widget.ProgressBar中android:indeterminateOnly默认设置为true
indeterminate意思是“模糊的,不明确的”
Widget.ProgressBar   在sytle样式文件中android:indeterminateOnly属性设置为true,表示的是这个ProgressBar是模糊的,不明确的
 当前它并没有体现出具体的进度,只是一个小圆圈在转,在系统默认的 style 中android:indeterminateOnly设置为true
Widget.ProgressBar.Horizontal    在sytle样式文件中android:indeterminateOnly属性置为false
 如果需要使用android:indeterminateDrawable属性来自定义进度条,则在xml布局文件中需要将android:indeterminateOnly设置为true
 则出现一个默认的加载的动画,即android:indeterminateDrawable中设置的

在 xml 布局文件中使用 ProgressBar ,其中第一个显示的是圆圈样式的进度条,第二个显示的是 系统提供样式的 水平进度条。

//圆形进度条         
<ProgressBar
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:id="@+id/progress_bar">

</ProgressBar>
            
//水平进度条
<ProgressBar
      android:id="@+id/progress_horizontal"       
      style="?android:attr/progressBarStyleHorizontal"
      android:layout_width="200dip"
      android:layout_height="wrap_content"
      android:max="100"
      android:progress="50"
      android:secondaryProgress="75">
</ProgressBar>

==================================================================================================

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity"
    android:background="#ffffff" >
   
    <!-- 圆形的progressBar -->
    <ProgressBar
        android:id="@+id/pb_circle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dip"
        android:layout_centerHorizontal="true"
        />

    <!-- 水平的progressBar  android:indeterminateOnly="true"-->
    <ProgressBar
        android:id="@+id/pb_horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@+id/pb_circle"
        android:layout_marginTop="30dip"
        style="?android:attr/progressBarStyleHorizontal"
        android:progress="50"
        android:secondaryProgress="60"
        android:minWidth="200dip"
        android:indeterminateOnly="true"
        />
   
</RelativeLayout>

Android 进度条 的属性说明:

android:animationResolution 
android:indeterminate 
android:indeterminateBehavior 
android:indeterminateDrawable  设置了动画中显示的图片 或 这动画的xml文件  
android:indeterminateDuration  设置不精确显示进度的持续时间
android:indeterminateOnly  该属性设置为true,则进度条将忽略进度,进而呈现一个无限循环的动画

android:interpolator   
android:max  设置进度条的最大值(最后一个水平进度条的设置为1000)
android:maxHeight  
android:maxWidth 
android:minHeight   
android:minWidth   
android:mirrorForRtl 
android:progress  设置当前的进度(最后一个水平进度条设置当前进度为500)
android:progressDrawable  设置进度的drawable参数,通过这个属性页可以自定不同样式的进度条
android:secondaryProgress  设置第二进度条(用于显示进度条里面的第二层进度条)

// english
android:animationResolution  Timeout between frames of animation in milliseconds
 Must be an integer value, such as "100".
android:indeterminate  Allows to enable the indeterminate mode. 
android:indeterminateBehavior  Defines how the indeterminate mode should behave when the progress reaches max. 
android:indeterminateDrawable  Drawable used for the indeterminate mode. 
android:indeterminateDuration  Duration of the indeterminate animation. 
android:indeterminateOnly  Restricts to ONLY indeterminate mode (state-keeping progress mode will not work). 

android:interpolator   
android:max  Defines the maximum value the progress can take. 
android:maxHeight  An optional argument to supply a maximum height for this view. 
android:maxWidth  An optional argument to supply a maximum width for this view. 
android:minHeight   
android:minWidth   
android:mirrorForRtl  Defines if the associated drawables need to be mirrored when in RTL mode. 
android:progress  Defines the default progress value, between 0 and max. 
android:progressDrawable  Drawable used for the progress mode. 
android:secondaryProgress  Defines the secondary progress value, between 0 and max. 


// 自定义进度条的流程
1、圆形进度条
首先,需要在 xml 中自定义一个动画,用于替换掉style中默认的android:indeterminateDrawable
res/drawable/circle.xml 中:
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android
    android:drawable="@drawable/circle_progress" 
    android:pivotX="50%" 
    android:pivotY="50%" 
/> 
circle_progress 为自定义的圆形进度条的图片资源


然后,在 xml 布局文件中:
<ProgressBar 
 android:id="@+id/circle" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_centerHorizontal="true" 
 android:indeterminateDrawable="@drawable/circle" 
/> 

2、水平进度条
首先,需要在 xml 中自定义一个动画
res/drawable/horizontal.xml 中:
<animation-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
    <item android:drawable="@drawable/progressbar_indeterminate1" android:duration="200" />
    <item android:drawable="@drawable/progressbar_indeterminate2" android:duration="200" />
    <item android:drawable="@drawable/progressbar_indeterminate3" android:duration="200" />
</animation-list>
progressbar_indeterminate1,progressbar_indeterminate2,progressbar_indeterminate3 为自定义的水平进度条的图片资源

然后,在 xml 布局文件中:
<ProgressBar
        android:id="@+id/pb_horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="50dip"
        android:layout_marginRight="50dip"
        android:layout_centerHorizontal="true"
        style="?android:attr/progressBarStyleHorizontal"
        android:progressDrawable="@drawable/horizontal"
        android:indeterminateDrawable="@drawable/horizontal"
/>


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录结构: 第2章、Android应用程序界面设计,即View 2.2、布局管理(Layout):LinearLayout、TableLayout、FrameLayout、RelativeLayout; 2.3、基本界面组件:TextView、EditText; Button、ImageButton; 9Patch; RadioButton、CheckBox; ToggleButton;AnalogClock、DigitalClock; ImageView; 2.4、高级界面组件:AutoCompleteTextView; Spinner; DatePicker、TimePicker; ProgressBar; SeekBar; RatingBar; TabHost; ScrollView; ListView、ListActivity; ExpandableListView; GridView、ImageSwitcher; Gallery; 2.5、对话框:AlertDialog; PopupWindow; DatePickerDialog、TimePickerDialog; ProgressDialog; 2.6、消息提示:Toast; Notification; 2.7、菜单:OptionMenu、SubMenu; ContextMenu; 第3章、Android事件处理,包括按键响应机制和消息传递机制 3.2、基于监听器的事件处理: 3.3、基于回调的事件的处理: 3.4、响应系统设置的事件: 3.5、Handler消息传递机制: 第4章、深入理解Activity 4.1、建立、配置和使用Activity: 4.2、Activity的回调机制: 4.3、Activity的生命周期: 第5章、使用Intent和IntentFilter进行通信 5.1、Intent对象详解: 5.2、Intent的属性及intent-filter配置:Component属性; Action、Category属性与intent-filter配置; Data、Type属性与intent-filter配置; Extra属性; 5.3、使用Intent创建Tab页面: 第6章、Android应用的资源 6.1、资源的类型及存储方式: 6.2、使用字符串、颜色、尺寸资源: 6.3、数组资源: 6.4、使用Drawable资源:图片资源; StateListDrawable资源; LayerDrawable资源; ShapeDrawable资源; ClipDrawable资源; AnimationDrawable资源; 6.5、使用原始XML资源: 6.6、使用Layout资源: 6.7、使用菜单(Menu)资源: 6.8、样式(Style)和主题(Theme)资源: 6.9、属性(Attribute)资源: 6.10、使用原始资源: 6.11、国际化和资源自适应: 第7章、图形与图像处理 7.1、使用简单图片:Drawable; Bitmap、BitmapFactory; 7.2、绘图:Canvas; Paint; Path; 7.3、图形特效处理:使用Matrix控制变换; 使用drawBitmapMesh扭曲图像; 使用Shader填充图形; 7.4、逐帧(Frame)动画:AnimationDrawable; 7.5、补间(Tween)动画:Interpolator; 位置、大小、旋转度、透明度; 7.6、使用SurfaceView实现动画: 第8章、Android的数据存储和IO 8.1、使用SharedPreferences:SharedPreferences; Editor; 8.2、File存储:openFileOutput和openFileInput; 读写SD卡文件; 8.3、SQLite数据库:SQL语句; SQLiteDatabase; SQLiteOpenHelper; sqlite3 tools; 8.4、手势(Gesture): 8.5、自动朗读(TTS): 8.6、网络存储: 第9章、使用ContentProvider实现数据共享 9.1、数据共享标准:ContentProvider; Uri; ContentResolver; 9.2、操作系统的ContentProvider:使用ContentProvider管理联系人和多媒体; 9.3、实现ContentProvider:创建ContentProvider的步骤; 9.4、监听ContentProvider的数据:ContentObserver; 第10章、Service与BroadcastReceiver 10.1、Service:Service的创建、配置、启动、停止、绑定和通信; Service的生命周期; 10.2、跨进程调用Service(AIDL服务):创建AIDL文件; 将接口暴露给客户端; 客户端访问AIDLService; 10.3、电话管理器:TelephoneManager; 10.4、短信管理器:SmsManager; 10.5、音频管理器:AudioManager; 10.6、振动器:Vibrator; 10.7、手机闹钟服务:AlarmManager; 10.8、接受广播信息:BroadcastReceiver; 10.9、接受系统广播消息: 第11章、多媒体应用开发 11.1、音频和视频的播放:MediaPlayer; SoundPool; VideoView; 11.2、使用MediaRecorder录制音频: 11.3、控制摄像头拍照:Camera; 第12章、OpenGL与3D应用开发 12.2、OpenGL ES基础: 12.3、绘制2D图形: 12.4、绘制3D图形: 第13章、Android的网络应用 13.1、基于TCP协议的网络通信(套接字Socket):Socket; ServerSocket; 13.2、使用URL访问网络资源:URL; URLConnection; 13.3、使用HTTP访问网络:HttpURLConnection; HttpClient; 13.4、使用WebView视图显示网页: 13.5、使用WebService进行网络编程: 第14章、管理Android手机桌面 14.1、管理手机桌面: 14.2、改变手机壁纸: 14.3、桌面快捷方式: 14.4、管理桌面小控件: 14.5、实时文件夹(LiveFolder): 第15章、传感器应用开发 15.2、Android的常用传感器:方向传感器Orientation; 磁场传感器Magnetic Field; 温度传感器Temperature; 光传感器Light; 压力传感器Pressure; 第16章、GPS应用开发 16.1、支持GPS的核心API: 16.2、获取LocationProvider: 16.3、获取定位信息: 16.4、临近警告: 第17章、使用Google Map服务 17.1、调用Google Map的准备: 17.2、根据GPS信息在地图上定位: 17.3、GPS导航: 17.4、根据地址定位: 第18章、疯狂连连看 第19章、电子拍卖系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值