请选择 进入手机版 | 继续访问电脑版
之前研究了相关的绘制,单个控件的测量,以及简单的类内部事件处理。我们先自定义个一个圆形进度条作为实践。然后再继续更复杂的自定义控件:
    看效果:
Android-自定义View-自定义一个圆形进度条-1.gif
  有几个要素:
   1. 内圈圆的绘制+中心进度的绘制
   2. 最外圈的外切范围的计算+进度的绘制
   3. 第二层外圈的外切范围的计算+进度比最外层稍慢的绘制处理
   4. 当然最麻烦的是就是你需要去兼容内圈半径不能超过控件范围、最外层环不能太大以及覆盖住内圈的问题、第二层外圈(黑色部分)正好在最外层外环和内圈的问题,最后的一系列处理也就是为了做到兼容适配,不管用户怎么设置都没问题。当然初始阶段我觉得可以先做效果,然后进行版本迭代....
    我想先把代码、属性、布局贴出来吧:
    attrs.xml  --- 属性配置
  1. [/code]   activity_main.xml --- 布局文件
  2. [code]
复制代码
   CircleProgressView.java --- 奉上自定义控件文件
  1. [/code]   然后调用方式,自定义了一个定时器不停的进行(调用部分代码):
  2. [code]
复制代码
  注意我们的内圈绘制时半径是: radius / 2  - radius是宽高最小值的一半哟!
Android-自定义View-自定义一个圆形进度条-2.jpg
   调试过程中的比较麻烦的就是两个外环(记住内圈半径是radius / 2):
    这样我们再来计算两个外圈半径厚度才能比较好处理....如下部分是厚度的处理:
Android-自定义View-自定义一个圆形进度条-3.jpg
  或许我们需要这么分割一下才能便于我们进行计算:
Android-自定义View-自定义一个圆形进度条-4.jpg
  在测量最外层环半径是可以这样: (minWH - radius/2 * 2 ) / 2(假设宽高一样, 就是控件宽度 - 内圈直径, 然后除以2,但是贴近红圈,这样黑色圈就不能放了。) 所以为了好看,我们再除以2空出一个内环的位置. (minWH - radius/2 * 2 ) / 2 / 2 = (minWH - radius/2 * 2 ) / 4 = (2*radius- radius/2 * 2 ) / 4  = radius/4;
   目前就是大概就这样做了一个计算,总感觉不是很精准的样子。可能还有bug啥的。 后面具体深入paint的时候我们再回味吧....流程先搞了再说!
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|翁笔

© 2001-2018 Wengbi.com

返回顶部