本文介绍了ImageView实现Android colorPikcer选择器的示例代码,分享给大家,具体如下:
Android colorPikcer选择器
环形的选择器,主要思路是:
-
<李>颜色选在放在ImageView的背景上面,根据点击的位置判断选择的颜色。李>
<李>重写ondraw,在ondraw里面判断点击点的颜色。李>
<李>根据当前选择的颜色设置图片的src。李>
<强>获取位图强>
在ColorPickerView构造函数中初始化位图。因为getBackground有多种可拉的,然后获取位图的方式也不用,
空白init(上下文语境,@Nullable AttributeSet attrs, int defStyleAttr) { 可拉的可拉的=getBackground (); 如果(可拉的instanceof BitmapDrawable) { mBitmap=((BitmapDrawable)可拉的).getBitmap (); }else if(可拉的instanceof VectorDrawable) { mBitmap=Bitmap.createBitmap (drawable.getIntrinsicWidth (), drawable.getIntrinsicHeight (), Bitmap.Config.ARGB_8888); 帆布vectorCanvas=新画布(mBitmap); 可拉的。setBounds (0, 0, vectorCanvas.getWidth (), vectorCanvas.getHeight ()); drawable.draw (vectorCanvas); }
<强>重写ondraw 强>
根据联系事件的左边获取位图对应点的颜色。
需要注意的是如果视图的宽和高参数是wrap_content, MotionEvent的点击的点一定在位图的坐标内。但是如果不是wrap_content,需要对坐标转换,利用矩阵矩阵对点击点转换。
公共布尔> 公共类ColorPickerView android.support.v7.widget延伸。AppCompatImageView实现View.OnTouchListener { 私人位图mBitmap; 私人int mSelectColor=1; 私人int mIndex=1; 私人int [] mDrawableSelects; 私人int [] mColorArray; 私人OnColorSelectedListener mOnColorSelectedListener; 公共ColorPickerView(上下文语境){ 这(上下文,null); } 公共ColorPickerView(上下文语境,@Nullable AttributeSet attrs) { 这(上下文、attrs 0); } 公共ColorPickerView(上下文语境,@Nullable AttributeSet attrs, int defStyleAttr) { 超级(上下文、attrs defStyleAttr); init(上下文、attrs defStyleAttr); } 空白init(上下文语境,@Nullable AttributeSet attrs, int defStyleAttr) { 可拉的可拉的=getBackground (); 如果(可拉的instanceof BitmapDrawable) { mBitmap=((BitmapDrawable)可拉的).getBitmap (); }else if(可拉的instanceof VectorDrawable) { mBitmap=Bitmap.createBitmap (drawable.getIntrinsicWidth (), drawable.getIntrinsicHeight (), Bitmap.Config.ARGB_8888); 帆布vectorCanvas=新画布(mBitmap); 可拉的。setBounds (0, 0, vectorCanvas.getWidth (), vectorCanvas.getHeight ()); drawable.draw (vectorCanvas); } TypedArray resTypeArray=上下文。obtainStyledAttributes (attrs R.styleable.ColorPickerView); int colorPickerArrayId=resTypeArray.getResourceId (R.styleable。ColorPickerView_cp_selected_drawable_array, 0); resTypeArray.recycle (); 如果(colorPickerArrayId !=0) { TypedArray typeArray=getresource () .obtainTypedArray (colorPickerArrayId); mDrawableSelects=new int [typeArray.length ()); for (int i=0;我& lt;typeArray.length ();我+ +){ mDrawableSelects[我]=typeArray。getResourceId (0); } typeArray.recycle (); } setOnTouchListener(这个); } @Override 公共布尔ondraw (v, MotionEvent事件){ 如果(event.getAction ()==MotionEvent。ACTION_DOWN,,mBitmap !=null) { 如果(event.getX()在v.getWidth () | | event.getX () & lt;0){ 返回错误; } 如果(event.getY()在v.getHeight () | | event.getY () & lt;0){ 返回错误; } 浮动scaleX=mBitmap.getWidth () * 1.0 f/v.getWidth (); 浮动写入scaleY=mBitmap.getHeight () * 1.0 f/v.getHeight (); 浮动新浮动[][]接触点={event.getX (), event.getY ()}; 矩阵矩阵=new矩阵(); 矩阵。setScale (scaleX写入scaleY); matrix.mapPoints(接触点); mSelectColor=mBitmap.getPixel ((int)接触点[0],(int)接触点[1]); mIndex=getColorIndex (mSelectColor); 如果(mDrawableSelects。长度比;0,,mIndex祝辞=0,,mIndex & lt;mDrawableSelects.length) { ((ImageView) v) .setImageResource (mDrawableSelects [mIndex]); } 如果(mOnColorSelectedListener !=null) { mOnColorSelectedListener。onColorSelected (mIndex mSelectColor); } } 返回错误; } 私人int getColorIndex (int颜色){ for (int i=0;我& lt;mColorArray.length;我+ +){ 如果(颜色==mColorArray[我]){ 返回我; } } 返回1; } 公共空间setSelectColorArray (int[]数组){ mColorArray=数组; } 公共空间setSelectDrawableIdArray (int [] idArray) { mDrawableSelects=idArray; } 公共int getIndex () { 返回mIndex; } 公共int getSelectColor () { 返回mSelectColor; } 公共空间setOnColorSelectedListener (OnColorSelectedListener侦听器){ mOnColorSelectedListener=侦听器; } 公共接口OnColorSelectedListener { 空白onColorSelected (int指数,int颜色); } }ImageView实现Android colorPikcer选择器的示例代码