Android进度条类控件ProgressBar和SeekBar
进度条类控件ProgressBar作为某些操作进度的可视指示器,为用户呈现操作的进度,它还有一个次要的进度条,用来显示中间进度,如在流媒体播放时视频缓冲的进度。进度条有两种模式确定模式和不确定模式,在不确定模式下,进度条显示循环动画,这种模式常用于应用程序使用任务的长度是未知的。
ProgressBar的样式设定其实有两种方式如下:
Widget.ProgressBar.Horizontal
Widget.ProgressBar.Small
Widget.ProgressBar.Large
Widget.ProgressBar.Inverse
Widget.ProgressBar.Small.Inverse
Widget.ProgressBar.Large.Inverse
使用的时候可以这样:style=”@android:style/Widget.ProgressBar.Small”,另外还有一种方式就是使用系统的attr,下面的方式是系统的style:
style=”?android:attr/progressBarStyle”
style=”?android:attr/progressBarStyleHorizontal”
style=”?android:attr/progressBarStyleInverse”
style=”?android:attr/progressBarStyleLarge”
style=”?android:attr/progressBarStyleLargeInverse”
style=”?android:attr/progressBarStyleSmall”
style=”?android:attr/progressBarStyleSmallInverse”
style=”?android:attr/progressBarStyleSmallTitle”
<ProgressBar android:id="@+id/progressBar1" style="?android:attr/progressBarStyleHorizontal" <==> style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" />
ProgressBar中几个
1.重要方法:
setProgress() // 设置当前进度值
incrementProgressBy() // 设置进度增量
2.常用属性:
progressDrawable // 设置进度条的轨道的绘制情况
indeterminateDrawable // 设置绘制不显示进度的进度条的Drawable对象
<!--系统--> <ProgressBar android:id="@+id/progressBar3" style="@android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" /> <!--通过样式自定义--> <ProgressBar style="@style/mProgress_circle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" /> <!--通过shape自定义--> <ProgressBar style="@style/mProgress_circle_shape_loading" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" />
mProgress_circle.xml
<style name="mProgress_circle"> <item name="android:indeterminateDrawable">@drawable/progressbar_circle</item> <item name="android:minWidth">25dp</item> <item name="android:minHeight">25dp</item> <item name="android:maxWidth">60dp</item> <item name="android:maxHeight">60dp</item> </style>
progressbar_circle.xml
<?xml version="1.0" encoding="utf-8"?> <!-- android:drawable 自定义的菊花图片 --> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/voice_loading" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360" > </rotate>
mProgress_circle_shape_loading.xml
<style name="mProgress_circle_shape_loading"> <item name="android:indeterminateDrawable">@drawable/progress_circle_shape</item> </style>
progress_circle_shape.xml
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360" > <shape android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="8" android:useLevel="false" > <gradient android:centerColor="#FFFFFF" android:centerY="0.50" android:endColor="#1E90FF" android:startColor="#000000" android:type="sweep" android:useLevel="false" /> </shape> </rotate>
自定义动画实现
<LinearLayout android:id="@+id/progressbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" > <ProgressBar android:id="@+id/my_progressbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingLeft="30dp" android:minWidth="250dp" android:minHeight="250dp" android:indeterminateDrawable="@anim/progress_circle_loading_anim" /> </LinearLayout>
动画资源
progress_loading_image_01.png progress_loading_image_02.png
动画资源文件 progress_circle_loading_anim.xml
<?xml version="1.0" encoding="utf-8"?> <animation-list android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:duration="100" android:drawable="@drawable/progress_loading_image_01" /> <item android:duration="100" android:drawable="@drawable/progress_loading_image_02" /> </animation-list>
SeekBar是一种特殊的进度条,其与ProgressBar的区别在于,SeekBar支持用户手动调整进度,可以实现进度条的个性化设置。
SeekBar的继承关系如下:
java.lang.Object
->android.view.View
->android.widget.ProgressBar
->android.widget.AbsSeekBar
->android.widget.SeekBar
监控SeekBar的进度变化的实现方法如下:
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){ @Override public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { ...//fromUser参数标识变化是否来自用户 } @Override public void onStartTrackingTouch(SeekBar seekBar) { ...//开始触摸手势 } @Override public void onStopTrackingTouch(SeekBar seekBar) { ...//结束触摸手势 } });
SeekBar继续至ProgressBar拥有ProgressBar所有特性,区别在可以拖动展示.
我们来看下如何自定义一个SeekBar
<SeekBar android:id="@+id/seekBar2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="20dp" android:progressDrawable="@drawable/seekbar_progress_drawable1" android:thumb="@drawable/seekbar_progress_thum_selector" />
android:progressDrawable=”@drawable/seekbar_progress_drawable1″ //定义显示进度
android:thumb=”@drawable/seekbar_progress_thum_selector” //定义滑块
seekbar_progress_drawable1.xml
<?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@android:id/background" android:drawable="@drawable/progress_bar_n"> </item> <item android:id="@android:id/progress"> <clip> <nine-patch android:src="@drawable/progress_bar_p" /> </clip> </item> </layer-list>
seekbar_progress_thum_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/eq_seekbar_thumb_press" android:state_pressed="true"></item> <item android:drawable="@drawable/eq_seekbar_thumb_normal"></item> </selector>
<?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@android:id/background"> <shape> <corners android:radius="10dip" /> <gradient android:angle="270" android:centerColor="#ff000000" android:centerY="0.45" android:endColor="#ffAABD00" android:startColor="#ffffffff" /> </shape> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="10dip" /> <gradient android:angle="270" android:centerColor="#ffFFFF00" android:centerY="0.45" android:endColor="#ff808A87" android:startColor="#ffffffff" /> </shape> </clip> </item> </layer-list>
转载请注明来源:Android进度条类控件ProgressBar和SeekBar