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

转自 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
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-12-19 15:37:58

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

android异步任务图片下载(进度条提示进度)

一.AsyncTask介绍 Android提供了几种在其他线程中访问UI线程的方法. Activity.runOnUiThread( Runnable ) View.post( Runnable ) View.postDelayed( Runnable, long ) Hanlder 这些类或方法同样会使你的代码很复杂很难理解.然而当你需要实现一些很复杂的操作并需要频繁地更新UI时这会变得更糟糕. 为了解决这个问题,Android 1.5提供了一个工具类:AsyncTask,它使创建需要与用户界

【WInform】使用BackgroundWorker控制进度条显示进度

许多开发者看见一些软件有进度条显示进度,自己想弄,项目建好后发现并没有自己想象中的那么简单...看了网上很多教程后,写了一个小Demo供网友们参考~~,Demo的网址:http://pan.baidu.com/s/1dDIxHvz BackgroundWorker可以在代码中创建,也可以在工具箱中拖,但如果要使用,必须将其的WorkerReportsProgress属性设置为True! 这个Demo是一个复制文件的,为了效果更明显,建议复制的文件多一点,方便进度条显示. 界面如下: 下面是全部代

Android ProgressBar实现加载进度条

progressBar Android进度条组件. progressBar的关键属性: android:max="100"     最大显示进度条 android:progress="500"     第一显示进度 android:secondaryProgress="80"     第二显示进度 android:indeterminate="true"     设置是否精确显示 progressBar的关键方法: setPr

android加了进度条和进度文本多线程断点续传下载

我们要用进度条首先要改变它的样式,变成水平的 <ProgressBar         android:id="@+id/pro"        android:layout_width="match_parent"        android:layout_height="wrap_content"        style="@android:style/Widget.ProgressBar.Horizontal"

[转] 实现winfrom进度条及进度信息提示,winfrom程序假死处理

china_xuhua 原文地址 1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线 程,如果不采用多线程控制进度条,窗口很容易假死(无法适时看到进度信息).下面我就简单结合一个我写的例子给大家做一个介绍. 第一步:设计界面,注意需要引用 using System.Threading; 控件名称分别为: progressBar1:label1:textBox1:button1: 第二

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

1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口很容易假死(无法适时看到进度信息).下面我就简单结合一个我写的例子给大家做一个介绍. 第一步:设计界面,注意需要引用 using System.Threading; 控件名称分别为: progressBar1:label1:textBox1:button1: 第二步:定义一个代理,用于更新Progr

HTML5/CSS3超酷进度条 不同进度多种颜色

下面我们来看看实现这款进度条的过程和源码,代码主要由HTML.CSS以及jQuery组成,实现过程也相对比较简单.HTML代码: <div id="wrapper">     <div class="loader-container">           <div class="meter">0</div>           <span class="runner"&g

页面效果:圆形进度条 环形进度条

环形进度条(1.5秒之内倒计时) 效果做的比较粗糙,就是css的 clip属性,先切右边一半,再切左边一半.根据三角函数计算y高度 http://www.w3school.com.cn/cssref/pr_pos_clip.asp css的clip属性 <script src="http://cdn.bootcss.com/jquery/1.12.1/jquery.min.js"></script> <script type="text/java

实时读取进度条当前进度

最近做了一个 自动升级程序  在  下载文件和 解压缩文件时  用到了 进度条        今天先把  进度条的使用  记录下 改天有时间 把自动升级 程序  再记录进来 进度条  读取  离不开 线程        现在用两种方法 实现这个效果 一.用VS 里自带的Timer控件 int A =1;        private void timer1_Tick(object sender, EventArgs e)        {            if(A<100)