代码中设置ProgressBar的颜色

一:使用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:裁剪的方向
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,596评论 25 708
  • 我像是一个活在梦里的人,总是不愿醒来,不愿醒来…… 但人终会长大,自然而然的,就像痴心在梦中,又在下一刻猛...
    仙无颜阅读 131评论 0 0
  • 我是个四个月大的宝妈,最近有些困惑。白天忙的时候吧还行,一闲下来特别容易感觉自己失落,就觉得自己该做些什么吧,又开...
    枣红马阅读 236评论 3 0
  • 作者:谢枫华 《GATE 奇幻自卫队》动画第二季开播在即,官网举办人气投票活动,获得第一名的角色将会被制作新绘制的...
    AnimeTamashii阅读 934评论 0 0
  • 如何全局安装一个 node 应用? 2、 package.json 有什么作用? 题目3: npm install...