我有一个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;
}
});
}
}
我相信这是因为产生的坐标在 与整个屏幕的比较
是的,您需要做一些简单的推论才能获得图像上的触摸坐标视图:
int[] imgCoords = new int[2];
imageView.getLocationOnScreen(imgCoords);
获取触摸的 X,Y 并从中取出图像视图坐标:
int wholeX = (int) event.getX();
int wholeY = (int) event.getY();
int imageX = wholeX - imgCoords[0];
int imageY = wholeY - imgCoords[1];