理解Android自定义ProgressBar的系统实现

今天在查找资料的时候看到篇博客,教你怎么自定义ProgressBar样式:

在res下创建drawable文件夹,新建文件drawable/progressbar_color.xml

 <?xml version="1.0" encoding="utf-8"?>  
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >    
    <!-- 背景  gradient是渐变,corners定义的是圆角 -->  
    <item android:id="@android:id/background">  
        <shape> //注意是shape  
              <corners android:radius="10dp" />  
            <solid android:color="#ffffff" />  
        </shape>  
    </item>  
    <!-- 第二条进度条颜色 -->  
    <item android:id="@android:id/secondaryProgress">  
        <clip> //注意是从clip  
            <shape> //注意是从shape  
                <corners android:radius="10dip" />  
   
                <gradient  
                    android:angle="90.0"  
                    android:centerColor="#ac6079"  
                    android:centerY="0.45"  
                    android:endColor="#6c213a"  
                    android:startColor="#e71a5e" />  
            </shape>  
        </clip>  
    </item>  
    <!-- 进度条 -->  
    <item android:id="@android:id/progress">  
        <clip> //注意是clip  
            <shape> //注意是shape  
                <corners android:radius="10dip" />  
   
                <solid android:color="#FF8080" />  
            </shape>  
        </clip>  
    </item>  
   
</layer-list>

然后在布局中引用就可以了。
activity_main.xml

<ProgressBar   
        android:id="@+id/my_progress"  
        android:layout_width="match_parent"  
        android:layout_height="12dp"  
        android:max="100"  
        android:progress="40"  
        android:secondaryProgress="70"  
        style="?android:attr/progressBarStyleHorizontal"  
        android:progressDrawable="@drawable/progressbar_color"/>  

注:1、
secondaryProgress 和 progress 必须要使用 <clip></clip>元素
2、其他的一些常用属性:
Android:maxHeight="2dp"android:minHeight="2dp" 限定progressbar的高度

android:thumb="@drawable/big_hook_ok" 进度位置的图片


其实想知道为什么这里自定义drawable的时候要使用系统的id,

<item android:id="@android:id/background"> 
<item android:id="@android:id/secondaryProgress">
<item android:id="@android:id/progress">

只有从源码中找答案了!

通过styles里的progressDrawable配置

Paste_Image.png
Paste_Image.png
Paste_Image.png
Paste_Image.png

找到原因了,原来ProgressBar使用了系统的id属性,通过id属性设置了ProgressBar的样式。

看来以后如果自己做sdk开发,或者第三方控件的时候也可以这么处理了,不错get!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容