我有一个OnTouchListener但是当我实际测试我的程序并触摸屏幕时会显示一个不应该是它的颜色。我使用颜色块进行了测试,但它的工作方式仍然是关闭的,如果你在一种颜色上触摸得太远,它会显示一个不同的颜色。我相信这是因为产生的坐标与整个屏幕相比而不是图像视图 - 我希望从中选择它。我如何使OnTouchListener仅用于图像视图而不是整个屏幕?谢谢。
final Bitmap bitmap2 = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Matrix inverse = new Matrix();
v.getMatrix().invert(inverse);
float[] touchPoint = new float[] {event.getX(), event.getY()};
inverse.mapPoints(touchPoint);
int x = Integer.valueOf((int)touchPoint[0]);
int y = Integer.valueOf((int)touchPoint[1]);
// int x = (int) event.getX();
// int y = (int) event.getY();
int pixel = bitmap2.getPixel(x, y);
int red = Color.red(pixel);
int blue = Color.blue(pixel);
int green = Color.green(pixel);
Bitmap bitmap = BitmapFactory.decodeFile(output.getAbsolutePath());
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.rgb(red,green,blue));
Bitmap workingBitmap = Bitmap.createBitmap(bitmap);
Bitmap mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(mutableBitmap);
canvas.drawRect(50, 50, 500, 250, paint);
ImageView imageView = (ImageView)findViewById(R.id.Image_view);
imageView.setAdjustViewBounds(true);
imageView.setImageBitmap(mutableBitmap);
return true;
}
});
}
}
答案 0 :(得分:0)
我相信这是因为产生的坐标是 与整个屏幕比较
是的,你需要做一些简单的演绎来获得imageView上的触摸坐标:
int[] imgCoords = new int[2];
imageView.getLocationOnScreen(imgCoords);
获取触摸的X,Y并从中取走imageView坐标:
int wholeX = (int) event.getX();
int wholeY = (int) event.getY();
int imageX = wholeX - imgCoords[0];
int imageY = wholeY - imgCoords[1];