先上效果图:
先来啰嗦几句,哈哈哈
此控件真是一波三折啊,算了,还是直接说最终代码流程吧
先说使用流程:
1.XML配置
<com.zhuoapp.opple.view.ColorTouchView android:id="@+id/color_view" android:layout_width="wrap_content" android:layout_height="wrap_content" />
2.UI绑定事件,是不是很简单
mColorView.setOnColorViewTouchListener(new OnColorViewTouchListener() { @Override public void onUpEvent(final int color) { } @Override public void onMoveEvent(int color) { } @Override public void onDownEvent(int color) { } @Override public void onCancelEvent(int color) { } });
3.整个类源码如下
public class ColorTouchView extends View { // 画笔抗锯齿 public Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// 渐变色环画笔 public Paint mPaintLoc = new Paint(Paint.ANTI_ALIAS_FLAG);// public Paint mPaintFilter = new Paint(Paint.ANTI_ALIAS_FLAG);// // 三十六个色相RGB值,存放默认HSL转化来的RGB值 // (H对应360度平分36份的点,S对应为饱和度[默认为0.5],L对应为亮度[默认为0.5]) public int[] mCircleColors = new int[36]; private int alpha = 255; public Shader s; private RadialGradient radialGradient; public int num = 36; public int[] colorArray = new int[num]; public int currColor = Color.argb(255, 235, 235, 235); private int borderColor = Color.parseColor("#aeaeae"); private int pointColor = Color.parseColor("#ffffff"); // 取色圆的初始位置为颜色盘的最右侧 public int x_touchCircle;// 初始化取色圆的圆心的x坐标为宽度的90% public int y_touchCircle;// 初始化取色圆的圆心的y坐标为高度的50% // 小圆半径 public int r_touchCircle = dip2px(6); public int touchAreaDis = dip2px(20); public int height; // 屏幕高度 public int width;// 屏幕宽度