Android工作中的问题记录Android_UI_res

代码中设置ProgressBar的颜色

2017-02-27  本文已影响0人  BrokenDust

一:使用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:裁剪的方向
上一篇下一篇

猜你喜欢

热点阅读