美文网首页View
ProgressBar 进度条的进度两端是圆角的方法

ProgressBar 进度条的进度两端是圆角的方法

作者: heybik | 来源:发表于2016-06-02 22:27 被阅读6239次

    ProgressBar 自定义的时候可能会遇到一个问题,希望进度条中的进度的两端都是圆角的(或者进度的末端是圆角的);
    如下图:


    progress bar rounder

    但是根据自定义的shape 或者是 layer-list却总是很难做到,几乎都是被clip成了直角的样子;


    progress bar

    ;

    问题的原因就是如下链接中也会有相似的解答:
    Android开发中Progress需要两边都是圆角怎么办?


    为什么是直角的?原因就是被clip给切了,所以我们不能够用clip,而要使用scale这个标签。而上面链接给出的解答是定义一个.9的图片就能满足要求,由于我们这里是纯色的一个进度,所以没有必要通过再制作一个.9的图片,而只需要通过同样的方法引用我们定义的一个shape就可以了;
    见代码:

    <ProgressBar    
    android:layout_below="@id/text_1"    
    android:layout_marginTop="16dp"    
    android:layout_width="match_parent"    
    android:layout_height="wrap_content"    
    android:id="@+id/progressbar_1"   
    style="?android:attr/progressBarStyleHorizontal"    
    android:max="100"    
    android:progress="40"    
    android:progressDrawable="@drawable/progress_bar_drawable"    />
    

    progressDrawable 引用的progress_bar_drawable:

    <?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:topRightRadius="20dp"          
                android:bottomRightRadius="20dp" />  
              <solid android:color="#ED30353E"/>        
        </shape>    
       </item>   
       <item android:id="@android:id/secondaryProgress"> 
         <scale android:scaleWidth="100%">            
            <shape>                
                <corners android:topRightRadius="20dp"
                   android:bottomRightRadius="20dp"/>
                <solid android:color="#11ce33"/>         
           </shape>        
         </scale>   
       </item>    
    
      <item android:id="@android:id/progress">  
          <!--       
           <clip>      
           <shape>        
                 <corners android:topRightRadius="20dp"  
                      android:bottomRightRadius="20dp"/>   
                 <solid android:color="#FF009898"/>      
          </shape>    
          </clip>     
         -->      
      <scale android:scaleWidth="100%"     
           android:drawable="@drawable/progress_bar_ct"   />  
      </item>
    </layer-list>
    

    重点就是这个:

    <scale android:scaleWidth="100%"     
           android:drawable="@drawable/progress_bar_ct"   />  
     
    

    指定了一个我们自定义的shape:progress_bar_ct.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape
     xmlns:android="http://schemas.android.com/apk/res/android"  
      android:shape="rectangle"> 
       <!-- solid指定形状的填充色,只有android:color一个属性 -->   
       <solid android:color="#FF009898" />   
       <!-- padding设置内容区域离边界的间距 -->    
        <!-- corners设置圆角,只适用于rectangle -->    
        <corners android:bottomRightRadius="20dp" 
           android:topRightRadius="20dp"/>    
    </shape>
    

    这样就不需要自定义.9的图片了;
    PS:由于本人的需求是右端才是圆角,如果需要4个角都是圆角只需要修改一点代码即可;

    <corners android:bottomRightRadius="20dp" 
           android:topRightRadius="20dp"/> ```
    
    修改成:
    

    <corners android:radius="20dp" />

    即可;

    相关文章

      网友评论

      • c399937e7684:楼主功力深厚,赞
      • longforus:帮到了我
      • SheepYang:圆形的进度条怎么弄?
      • 我去可以的:可以的。很强势。谢谢楼主
      • huisonma:楼主,当进度较小时,进度层会出现问题,不是圆角。
        huisonma:@heybik 嗯嗯,我也是这么想,谢谢!
        heybik:是有这个情况,一般这个时候你可以设置为例如假设你是1% -5% 你都认为是显示5%;因为圆角的形成 需要一定的进度值
      • Alex_Code:你好,如果设置progress为一张图片,如何实现右边为圆角呢?
        heybik:@TenXu 这个没有去研究,当初是因为实际工作中遇到这个情况 当自己解决了而发现有很多人遇到同样的问题时,本着分享的目的写了这篇文章,没有再去深入研究各种自定义的progressbar了,你可以再找找有没有别的解决方法
        TenXu:@heybik 楼主啊,是否有研究一下用自定义图片让进度圆角呢???不用.9图片的哦
        heybik:我的这个方法,不太适合你说的整个progress为一张图片,首先你的图片自身要能够适应进度增加减少带来的变化,一般是.9 图片,如我在文章中列出来的链接 :Android开发中Progress需要两边都是圆角怎么办?
      • OneBelowZero: 貌似不行啊

      本文标题:ProgressBar 进度条的进度两端是圆角的方法

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