您的位置:首页 > 其它

点击图片取该处色or颜色选择器简单实现方法

2016-08-17 09:44 183 查看
如图需求



当时是准备如图绘制,但要美工给颜色渐变规则和颜色代码时候,她说给你一张图你直接取就行了。细想一下确实可以实现。

提示图片不要使用wrap_content,会失去比例

思路大致如下

1. 任意图片

2. 转bitmap

3. ontouch获取相对图片坐标取RGB

4. RGB转16进制

5. 不同手机分辨率的适配(bitmap长度和实际长度是不一样的)

mIvColor.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {

//根据坐标获取
ImageView imageView = ((ImageView) v);
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
//实际点击位置和图片的位置对应的关系
float scale = (float) bitmap.getWidth()/ imageView.getWidth();

//获取颜色              int color= bitmap.getPixel((int) (event.getX()*scale), (int)  (event.getY()*scale));

int redValue = Color.red(color);
int blueValue = Color.blue(color);
int greenValue = Color.green(color);
int alpha = Color.alpha(color);

//文本显示得到的RGB
//文本显示得到的16进制颜色代码
mTvRgb.setText("RGB:" + redValue + "," + greenValue + "," + blueValue
+"\n"+ColorManager.RGBTo16(redValue,greenValue,blueValue)
+"\n"   + "Alpha:" + alpha);
//显示得到的颜色               mLlColorShow.setBackgroundColor(Color.argb(alpha, redValue, greenValue, blueValue));

ULog.e("x---"+event.getX()+"y---"+event.getY());

return false;
}
});


RGB转16进制

/**
* RGB转16进制
* @param r
* @param g
* @param b
* @return
*/
public static String RGBTo16(int r,int g,int b){
// 如果次序是RRGGBB

//10进制
long c = r << 16 | g << 8 | b;

//16进制
return "HEX:"+"#"+Long.toHexString(c);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: