我在画布上绘制一个矩形,可以说插入点(5,5),问题是当我点击它时,触摸点是(60,85)。我知道触摸点取自整个屏幕,矩形点仅取自视图部分,但差异仍然很大。
我试图从屏幕尺寸中取出ImageView
top()
并left()
减去它,但仍然无法正常工作。
我尝试的另一种解决方案是采用 invert martixImageView
并检查坐标,但结果仍然相同。
这是我的另一种方法,但仍然无法正常工作:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView DrawingImage = (ImageView) this.findViewById(R.id.image2);
Bitmap bitmap2 = Bitmap.createBitmap((int) getWindowManager()
.getDefaultDisplay().getWidth(), (int) getWindowManager()
.getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888);
canvas.setBitmap(bitmap2);
DrawingImage.setImageBitmap(bitmap2);
// Draw Rectangle
Paint paint = new Paint();
paint.setColor(Color.GREEN);
paint.setStyle(Paint.Style.FILL);
Point insertRec=new Point(5, 110);
rec.set(insertRec.x, insertRec.y, insertRec.x+25, insertRec.y+20);
canvas.drawRect(rec,paint);
image = (ImageView) findViewById(R.id.image);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.test);
image.setImageBitmap(bitmap);
imageX=image.getWidth();
imageY=image.getHeight();
}
@SuppressWarnings("unused")
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == MotionEvent.ACTION_DOWN) {
int x=(int) event.getRawX();
int y=(int) event.getRawY();
final int index = event.getActionIndex();
final float[] coords = new float[] { event.getX(index), event.getY(index) };
Matrix matrix = new Matrix();
image.getImageMatrix().invert(matrix);
matrix.postTranslate(image.getScrollX(), image.getScrollY());
matrix.mapPoints(coords);
int[] arr = new int[2];
image.getLocationInWindow(arr);
int xx=rec.centerX();
int yy=rec.centerY();
if(rec.contains(x - arr[0], y - arr[1])){
Toast.makeText(this, "You pressed a port!!!!!!!!!", Toast.LENGTH_LONG).show();
}
}
有人能帮助我吗?
先感谢您!
最好的问候, 迪米塔尔·格奥尔基耶夫