代码中设置ProgressBar的颜色

作者: BrokenDust | 来源:发表于2017-02-27 09:38 被阅读0次

    一:使用xml的方式

      <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"--> <!--/>--> <solid android:color="#d50b01" /> 
                    </shape> 
                </clip>
         </item>
    

    然后在progressbar中设置progressbardrawable引用该xml文件即可,该方式用法是最常用的方式但是不适合进度条状态多的地方使用。

    二:在代码中进行设置,不依赖xml文件

    网上对该方式基本没有介绍,这里记录一下方便以后使用,适合进度条状态较多的时候使用,在一定程度上可减小apk的体积。

        ClipDrawable drawable = new ClipDrawable(new ColorDrawable(color), Gravity.LEFT, ClipDrawable.HORIZONTAL);
        progressBar.setProgressDrawable(drawable);//必须先设置到progressbar上再设置level,告诉这个drawable的宽度有多宽,这个level才能生效
      drawable.setLevel(progress * 100);
      progressBar.setProgressDrawable(drawable);
      progressBar.setProgress(progress);
    

    ClipDrawable 是一个可被裁剪的drawable,它会根据你设置的level进行裁剪,他默认的level为0~10000,所以再设置progress的时候需要乘以100才能达到你真正想要的效果。

        ClipDrawable drawable = new ClipDrawable(new ColorDrawable(color), Gravity.LEFT, ClipDrawable.HORIZONTAL);
        参数1:一个drawable对象
        参数2:开始裁剪的方位
        参数3:裁剪的方向
    

    相关文章

      网友评论

        本文标题:代码中设置ProgressBar的颜色

        本文链接:https://www.haomeiwen.com/subject/wytzwttx.html