canvas教程

Android自定义View之圆形进度条总结(4)

字号+ 作者:H5之家 来源:H5之家 2017-05-19 13:06 我要评论( )

考虑到圆弧设置单色和渐变的区别,即单色只需要提供一种色值,而渐变至少需要提供两种色值。可以有以下几种解决方案: 定义两个属性,渐变的优先级高于单色的。 定义一个 format 为 string 属性,以 #FFFFFF|#00000

考虑到圆弧设置单色和渐变的区别,即单色只需要提供一种色值,而渐变至少需要提供两种色值。可以有以下几种解决方案:

  • 定义两个属性,渐变的优先级高于单色的。
  • 定义一个 format 为 string 属性,以 #FFFFFF|#000000 形式提供色值
  • 定义一个 format 为 color|reference 的属性,其中 reference 属性指代渐变色的数组。
  • 这里选用第三种方案,实现如下:

    <!-- 圆形进度条 -->  <declare-styleable name="CircleProgressBar">      <!-- 圆弧颜色, -->      <attr name="arcColors" format="color|reference" />  </declare-styleable>     <!-- colors.xml -->  <color name="green">#00FF00</color>  <color name="blue">#EE9A00</color>  <color name="red">#EE0000</color>  <!-- 渐变颜色数组 -->  <integer-array name="gradient_arc_color">     <item>@color/green</item>     <item>@color/blue</item>     <item>@color/red</item>  </integer-array>     <!-- 布局文件中使用 -->  <!-- 使用渐变 -->  <com.littlejie.circleprogress.DialProgress      android:id="@+id/dial_progress_bar"      android:layout_width="300dp"      android:layout_height="300dp"      app:arcColors="@array/gradient_arc_color" />  <!-- 使用单色 -->      <com.littlejie.circleprogress.DialProgress      android:id="@+id/dial_progress_bar"      android:layout_width="300dp"      android:layout_height="300dp"      app:arcColors="@color/green" />  

    代码中读取 xml 中配置:

    int gradientArcColors = typedArray.getResourceId(R.styleable.CircleProgressBar_arcColors, 0);     if (gradientArcColors != 0) {         try {             int[] gradientColors = getResources().getIntArray(gradientArcColors);             if (gradientColors.length == 0) {//如果渐变色为数组为0,则尝试以单色读取色值                 int color = getResources().getColor(gradientArcColors);                 mGradientColors = new int[2];                 mGradientColors[0] = color;                 mGradientColors[1] = color;             } else if (gradientColors.length == 1) {//如果渐变数组只有一种颜色,默认设为两种相同颜色                 mGradientColors = new int[2];                 mGradientColors[0] = gradientColors[0];                 mGradientColors[1] = gradientColors[0];             } else {                 mGradientColors = gradientColors;             }         } catch (Resources.NotFoundException e) {             throw new Resources.NotFoundException("the give resource not found.");         }     }  

    带刻度进度条

    前面,详细讲了 CircleProgress 的绘制思路,接下来讲 DialProgress。

    实话说,DialProgress 与 CircleProgress 的实现极其相似,因为两者之间其实就差了一个刻度,但考虑到扩展以及类职责的单一,所以将两者分开。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 实时监控Android设备网络封包

      实时监控Android设备网络封包

      2017-05-19 15:04

    • view的绘制流程.doc

      view的绘制流程.doc

      2017-05-15 18:03

    • android双缓冲绘图技术分析

      android双缓冲绘图技术分析

      2017-05-14 15:02

    • 包邮现货Android和PHP开发最佳实践第2版/安卓移动开发教程书籍/P

      包邮现货Android和PHP开发最佳实践第2版/安卓移动开发教程书籍/P

      2017-05-14 09:02

    网友点评
    d