Android 的自定义 View 属于 Android 开发的基础技能,但是要能够熟练的实现设计所需的 View 也需要多练习实践。
自定义 View 步骤
- 创建 View
- 处理 View 布局
- 绘制 View
- 处理 交互事件
- 优化自定义 View
自定义 View 关键方法
1 | onMeasure |
继承 View
这里记录实现一个圆环进度控件 RingView 的步骤。
1 | class RingView constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :View(context, attrs, defStyleAttr) |
这里使用了 Kotlin 中的 @JvmOverloads
注解来标记构造函数,@JvmOverloads
的作用就是能够使 RingView 的单个构造函数在编译过程中通过默认值来生成三个不同的构造函数,等同于 Java 实现三个参数不同的构造函数。
测量 View 的绘制区域
因为 RingView 是一个圆环进度控件,所以所需的绘制区域是一个正方形,View 的可绘制区域受到父控件的限制,所以正方形区域的边长则取 width 和 height 中的 min 值。
1 | override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { |
绘制 View
定义绘制图形所需要的一些属性
1 | private val maxValue = 100f//圆环最大值 |
如果需要在 xml 中能够配置某些属性则需要在 attrs 文件中声明属性
1 | <resources> |
在自定义 View 中获取这些 xml 中配置的属性
1 | init { |
绘制图形的关键类 Paint Canvas
1 | override fun onDraw(canvas: Canvas) { |
这个控件并没有重载 onTouchEvent
方法,因为暂时不需要处理用户的触摸点击事件,但是添加了进度动画,使用 ValueAnimator
实现。
1 | fun setProgress(progress: Float) { |
结束
这只是最基础的自定义 View 实现过程。在 Android 开发这条路上还有很长的路要走。这里是源码