转自 http://www.jianshu.com/p/6e7ea842d5ce

另外工作原理可以参考http://blog.csdn.net/lan603168/article/details/44705425

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" />

即可;

文/heybik(简书作者)
原文链接:http://www.jianshu.com/p/6e7ea842d5ce
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

android ProgressBar 进度条的进度两端是圆角的方法的更多相关文章

  1. struts2:上传多个文件时实现带进度条、进度详细信息的示范

    上一篇文章讲了上传单个文件与上传多个文件(属性驱动)的例子.本例是上传多个文件(属性驱动),并且显示进度条.进度详细信息的示范. 在文件上传选择界面,允许用户增加.删除选择的文件,且只能上传指定类型的 ...

  2. 【Winform】使用BackgroundWorker控制进度条显示进度

    许多开发者看见一些软件有进度条显示进度,自己想弄,项目建好后发现并没有自己想象中的那么简单...看了网上很多教程后,写了一个小Demo供网友们参考~~,Demo的网址:http://pan.baidu ...

  3. Eclipse进度条出现“Remote System Explorer Operation”解决方法

    Eclipse进度条出现“Remote System Explorer Operation”解决方法  

  4. Android ProgressBar实现加载进度条

    progressBar Android进度条组件.   progressBar的关键属性:      android:max="100"     最大显示进度条      andr ...

  5. Android开发 ---基本UI组件4:拖动事件、评分进度条、圆圈式进度条、进度条控制

    Android开发 ---基本UI组件4 1.activity_main.xml 描述: 定义了一个按钮 <?xml version="1.0" encoding=" ...

  6. 实现加载Tomcat服务器中的图片,并且有进度条提示进度

    首先布局页面, <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andr ...

  7. 实现winfrom进度条及进度信息提示,winfrom程序假死处理

    1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...

  8. 实现winfrom进度条及进度信息提示

    1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...

  9. ajax 上传文件,显示进度条,进度条100%,进度条隐藏,出现卡顿就隐藏进度条,显示正在加载,再显示上传完成

    <form id="uploadForm" method="post" enctype="multipart/form-data"&g ...

随机推荐

  1. nginx重启

    ps aux | grep nginx 查找 主进程 号 kill 9666 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.co ...

  2. Android根据文件路径使用File类获取文件相关信息

    Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...

  3. JavaScript 对象、DOM对象、jquery对象的区别、转换详解

    一.JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 访问对象的属性: [javascrip ...

  4. 查询AD账号的SID

    在非域控的计算机上可以查询所用AD用户的SID,不过现成的工具不能直接实现此目的,我们需要在这些计算机上安装RSAT(远程服务器管理工具),然后使用dsquery和dsget命令,来快速查询AD用户的 ...

  5. 交易B(队列)

    临近考试,又把之前的上机的题目看了一遍,自己又尝试着敲代码,发现好多之前的代码现在看来都被自己复杂化了许多,于是把现在重写的代码再贴出来. 之前的题目和代码戳这里 #include<queue& ...

  6. 加载音频Audio

    var cameraAudio = new Audio(); cameraAudio.src = 'camera.wav'; // 设置音频对象的属性,预加载视频 var options_audio ...

  7. 未添加document.ready产生的BUG

    今天在框架里使用superslide插件时,在javascript部分 <script type="text/javascript"> jQuery(".yj ...

  8. winrar命令行加压解密

    加密的操作 Rar.exe a -P123 test1.rar test.txt 其中参数a表示添加文件或文件夹到压缩包中,-P参数表示是带密码的加密 Rar.exe e -P123 test1.ra ...

  9. NLS_LANG

    NLS_LANG是一个环境变量,用于定义语言,地域以及字符集属性.对于非英语的字符集,NLS_LANG的设置就非常重要. NLS:‘National Language Support (NLS)’ 当 ...

  10. arch linux 安装 之 ---GPT--引导篇

    新入一二手X240 ,直接格式化,装archLinux. 一.引导程序安装--------------- 1.首先搞清楚什么是UEFI Under UEFI下的引导顺序 System switched ...