点击屏幕上任意一点,获取点击处的颜色值(RGB),还可以将十进制颜色值转化为十六进制颜色值显示,下面是个程序的样例:
package com.junto.text;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import org.json.JSONArray;
import org.json.JSONException;
import java.util.ArrayList;
import java.util.List;
/**
* Created by WangJinyong on 2019/1/23.
* 获取图片上任意一点的颜色值
*/
public class GetImgColorActivity extends Activity implements View.OnTouchListener {
DisplayMetrics metrics;
int screenWidth;//屏幕宽
int screenHeigh;//屏幕高
ImageView img;
StringBuilder sb = new StringBuilder();
Bitmap img1 = null;
int X,Y;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_getimgcolor);
metrics = getResources().getDisplayMetrics();
screenWidth = metrics.widthPixels;//屏幕宽
screenHeigh = metrics.heightPixels;//屏幕高
Log.e("GetImgColorActivity", "screenWidth:" + screenWidth + "screenHeigh:" + screenHeigh);
Log.e("GetImgColorActivity", "metrics.density:" + metrics.density + "metrics.densityDpi:" + metrics.densityDpi);
Log.e("GetImgColorActivity", "metrics.xdpi:" + metrics.xdpi + "metrics.ydpi:" + metrics.ydpi);
img = findViewById(R.id.img);
img.setOnTouchListener(this);
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
try {
switch (motionEvent.getAction()) {
/**
* 点击的开始位置
*/
case MotionEvent.ACTION_DOWN:
Color.parseColor("#FF1000");
Log.e("tag","十六进制 颜色代码 转换为 int 类型数值="+Color.parseColor("#FF1000"));
toHexEncoding(-61440);
Log.e("tag","十进制颜色值转化为十六进制的颜色值显示="+toHexEncoding(-61440));
Log.e("tag","十进制颜色值转化为十六进制的颜色值显示0="+toHexEncoding(0));
Log.e("tag","十进制颜色值转化为十六进制的颜色值显示204="+toHexEncoding(204));
Log.e("tag","十进制颜色值转化为十六进制的颜色值显示255="+toHexEncoding(255));
//将单个十进制(RGB)转换成16进制数值,然后再截取拼起来成为“#FFFFFF”的形式
String str = "#" + toHexEncoding(0).substring(6)+toHexEncoding(204).substring(6)+toHexEncoding(255).substring(6);
Log.e("tag","str="+str);
Log.e("GetImgColorActivity", "img.getWidth():" + img.getWidth() + "img.getHeight():" + img.getHeight());
X = (int) motionEvent.getX() / 2;
Y = (int) motionEvent.getY() / 2;
Log.e("GetImgColorActivity", "起始位置:" + X + "," + Y);
//根据坐标获取
Bitmap bitmap = ((BitmapDrawable) img.getDrawable()).getBitmap();
// Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.temp11);
Log.e("GetImgColorActivity", "bitmap.getHeight():" + bitmap.getWidth() + "," + bitmap.getHeight());
PointThread pointThread = new PointThread();
pointThread.start();
break;
/**
* 触屏实时位置
*/
case MotionEvent.ACTION_MOVE:
Log.e("GetImgColorActivity", "实时位置:" + motionEvent.getX() + "," + motionEvent.getY());
break;
/**
* 离开屏幕的位置
*/
case MotionEvent.ACTION_UP:
Log.e("GetImgColorActivity", "结束位置:" + motionEvent.getX() + "," + motionEvent.getY());
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
/**
* 注意返回值
* true:view继续响应Touch操作;
* false:view不再响应Touch操作,故此处若为false,只能显示起始位置,不能显示实时位置和结束位置
*/
return false;
}
class PointThread extends Thread {
@Override
public void run() {
super.run();
try {
BitmapFactory.Options bfoOptions = new BitmapFactory.Options();
bfoOptions.inScaled = false;
img1 = BitmapFactory.decodeResource(getResources(), R.mipmap.temp11, bfoOptions);
int bm_width = img1.getWidth();
int bm_height = img1.getHeight();
Log.e("GetImgColorActivity", "bm_width:" + bm_width + ",bm_height=" + bm_height);
sb.append("[");
for (int i = 0; i < bm_width + 1; i++) {
for (int j = 0; j < bm_height + 1; j++) {
// Log.e("tag", "{i:" + i + ",j:" + j + "},");
sb.append("{i:" + i + ",j:" + j + "},");
}
}
sb.replace(sb.length(), sb.length(), "]");
Log.e("tag", "sb.toString()=" + sb.toString());
Log.e("tag", "sb.length()=" + sb.length());
JSONArray jsonArray = null;
jsonArray = new JSONArray(sb.toString());
Log.e("tag", "jsonArray=" + jsonArray.length());
int pixel = img1.getPixel(X, Y);
//获取颜色
int redValue = Color.red(pixel);
int greenValue = Color.green(pixel);
int blueValue = Color.blue(pixel);
Log.e("GetImgColorActivity", "redValue=" + redValue);
Log.e("GetImgColorActivity", "greenValue=" + greenValue);
Log.e("GetImgColorActivity", "blueValue=" + blueValue);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
/**
* 十进制颜色值转化为十六进制的颜色值显示
*/
public static String toHexEncoding(int color) {
String R, G, B;
StringBuffer sb = new StringBuffer();
R = Integer.toHexString(Color.red(color));
G = Integer.toHexString(Color.green(color));
B = Integer.toHexString(Color.blue(color));
//判断获取到的R,G,B值的长度 如果长度等于1 给R,G,B值的前边添0
R = R.length() == 1 ? "0" + R : R;
G = G.length() == 1 ? "0" + G : G;
B = B.length() == 1 ? "0" + B : B;
sb.append("0x");
sb.append(R);
sb.append(G);
sb.append(B);
return sb.toString();
}
}