进度条ProgressBar(包括:对话框进度条、标题进度条、自定义进度条)

ProgressBar:进度条  还包括下面三种

ProgressBar有两种展示方式,表盘形式(普通、小、大)和条形填充形式。在layout定义时,需要通过设施style属性类设置展示方式。

XML重要属性

android:max  设置进度条长度最大值

android:progress  设定度条当前进度值

android:secondargProgress  第二进度条进度值

android:progressBarStyle  默认进度条样式

android:progressBarStyleHorizontal   水平样式

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

style="@android:style/Widget.ProgressBar.Small.Inverse"   //小型圆形进度条

style="@android:style/Widget.ProgressBar.Inverse"        //中型圆形进度条

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

style="@android:style/Widget.ProgressBar.Large.Inverse"  //大型圆形进度条

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

  其中,带有Inverse参数和不带有Inverse参数的style属性区别在于:当进度条控件所在的界面背景颜色为白色时,需要使用带有Inverse参数的style属性,否则进度条将看不见。

重要方法

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

getProgress():返回当前进度值

getSecondaryProgress()  返回次要当前进度值

incrementProgressBy(int diff) 指定增加的进度 即步长

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

setlndeterminate(boolean indeterminate):设置不确定模式下

setVisibility(int v):设置该进度条是否可视

1.ProgressDialog:对话框进度条

ProgressDialog pd=new ProgressDialog(this);

       pd.setTitle("对话框标题");

       pd.setMessage("信息,在下载....");

       pd.setMax(100);

       pd.setProgress(50);//进度

pd.setCancelable(false);//对话框按返回键不能撤销(一直转)

       pd.setSecondaryProgress(80);//第二进度

       pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);样式设置

       pd.show();//最后要显示

2.标题进度条

//设置进度条标题(该方法必须在setContentVi ew方法之前)

requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)

//显示标题栏进度条(在setCon方法下) setProgressBarVisibility(true);

3.自定义进度条

通过一个图片来自定义进度条:

android:indeterminateDrawable="@drawable/tupian_bg"

步骤:

1在res/drawable/下创建一个layer-list

2,设置ProgressBar的android:indeterminateDrawable属性

<layer-list 资源文件的设置xmlns:android="http://schemas.android.com/apk/res/android" >

    <item >   旋转

       <rotate android:drawable="@drawable/ic_launcher"

            android:fromDegrees="0" 角度0

            android:toDegrees="360"  到角度360旋转

            android:pivotX="50%"  轴中心

            android:pivotY="50%"/>

    </item>

</layer-list>

 

例子(先看下面的效果吧):

<ProgressBar
            android:id="@+id/pb_progressbar"
            style="@style/StyleProgressBarMini"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="40dp"
            android:background="@drawable/shape_progressbar_bg"
            android:max="100"
            android:progress="50"
            android:indeterminate="false" />

进度条的背景设置:drawable/shape_progressbar_bg.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <!-- 边框填充的颜色 -->
    <solid android:color="#ffcccc" />
    <!-- 设置进度条的四个角为弧形 弧形的半径-->
    <corners android:radius="90dp" />
    <!--padding:边界的间隔-->
    <padding
        android:bottom="2dp"
        android:left="2dp"
        android:right="2dp"
        android:top="2dp" />
</shape>

进度条的样式设置,values/styles.xml/StyleProgressBarMini

<style name="StyleProgressBarMini" parent="@android:style/Widget.ProgressBar.Horizontal">
        <item name="android:maxHeight">100dip</item>
        <item name="android:minHeight">10dip</item>
        <item name="android:indeterminateOnly">false</item>
        <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal</item>
        <item name="android:progressDrawable">@drawable/shape_progressbar_mini</item>
</style>

进度条颜色设置:drawable/shape_progressbar_mini.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">
        <shape>
            <corners android:radius="90dp" />
            <gradient
                android:angle="270"
                android:centerY="0.75"
                android:endColor="#98f7e9"
                android:startColor="#98f7e9" />
        </shape>
    </item>

    <!-- 第二进度条的背景   左边是圆形 但右边不能-->
    <item android:id="@android:id/secondaryProgress">
        <clip>
            <shape>
                <corners android:radius="5dip" />

                <gradient
                    android:angle="270"
                    android:centerY="0.75"
                    android:endColor="#df0024"
                    android:startColor="#df0024" />
            </shape>
        </clip>
    </item>

    <!--左边是圆形 但右边不能-->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="90dp" />
                <gradient
                    android:angle="270"
                    android:centerY="0.75"
                    android:endColor="@color/title_background"
                    android:startColor="@color/title_background" />
            </shape>
        </clip>
    </item>

</layer-list>

效果图:(可见 进度条右边不是圆弧  而是直角的)

解决办法:

<!--左边是圆形 但右边不能-->
    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <corners android:radius="90dp" />
                <gradient
                    android:angle="270"
                    android:centerY="0.75"
                    android:endColor="@color/title_background"
                    android:startColor="@color/title_background" />
            </shape>
        </clip>
    </item>


<!--修改为: 进度条的背景 -->
    <!-- 进度条 -->
    <item android:id="@android:id/progress">
        <scale android:scaleWidth="100%"
            android:drawable="@drawable/shape_progress_bg" />
    </item>

drawable/shape_progress_bg.xml     当然android:drawable 也可以使用.9图片

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/title_background" />
    <corners android:radius="90dp" />
</shape>

效果如下:

 

posted @ 2016-04-27 16:52  ts-android  阅读(2859)  评论(0编辑  收藏  举报