ImageView实现Android colorPikcer选择器的示例代码

  

本文介绍了ImageView实现Android colorPikcer选择器的示例代码,分享给大家,具体如下:
  

  

Android colorPikcer选择器

  

 ImageView实现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选择器的示例代码