ColorPicker
一款基于HSV颜色空间的仿Photoshop取色器的Android版颜色拾取器。
github地址:ColorPicker
前言
上一篇已经简单介绍了ColorPicker的核心自定义控件ColorPickerView的绘制流程。接下来我们详细解析一下ColorPickerView的监听事件相关代码。
注:
- 1 如果你对HSV颜色空间和RGB颜色空间不够熟悉的话,请参看该系列的第一篇文章——仿Photoshop取色器ColorPicker(一)
- 2 如果你对ColorPickerView的绘制流程不熟悉的话 ,请参看该系列的第二篇文章仿Photoshop取色器ColorPicker(二)
初始颜色传入
在讲颜色改变监听之前,先来讲讲初始颜色传入时,代码的变化吧!
- 1 先把RGB颜色转化成HSV三个值
- 2 刷新页面
invalidate
说明:调用invalidate
后,View会触发onDraw()
方法,因此两个调色板会根据现在的HSV值绘制当前显示的色板以及指示器的位置。
1 | public void setColor(int color) { |
颜色改变监听事件
在选择颜色过程中,会触发两种监听事件:轨迹球拖拽事件(onTrackballEvent
)、屏幕点击事件(onTouchEvent
)
轨迹球拖拽事件onTrackballEvent
观察这边的代码,这里分为两种情况处理:
- 当前触点在[饱和度灰度调色板]上
- 根据x、y坐标获得sat(饱和度)、val(灰度)值(并且做了边界处理)
- 当前触点在[色相调色板]上
- 根据y轴坐标获得hue(色相)值 (并且做了边界处理)
最后再将HSV值换算成RGB值,通过监听器回调给上一级(ColorPickerDialog)
1 | @Override |
屏幕点击事件onTrackballEvent
- 1 监听了手指的DOWN、UP、MOVE的事件
- 2 具体处理逻辑在
moveTrackersIfNeeded()
方法中- 2.1 先判断触点是否在调色板内
- 2.2 然后根据调色板更新对应的sat、val值或hue值
- 3 根据是否更新了颜色进行监听回调
- 4 刷新页面
invalidate();
1 | @Override |
最后汇总一下,今天这篇文章主要讲了,ColorPickerView的初始颜色传入+颜色改变监听。下一篇将讲解ColorPickerDialog的主要代码,敬请期待。