Android将图像坐标映射到Imageview

Android将图像坐标映射到Imageview,android,draw,Android,Draw,我想在imageview中显示的图像的特定坐标处绘制。我使用imageview的src属性将图像加载到视图中。此代码在自定义图像视图中用于在图像上绘制: protected void onDraw(Canvas canvas) { super.onDraw(canvas); float scaleh =(float)canvas.getHeight()/(float)orginalheight(); float scalew = ((float)canvas.ge

我想在imageview中显示的图像的特定坐标处绘制。我使用imageview的src属性将图像加载到视图中。此代码在自定义图像视图中用于在图像上绘制:

    protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    float scaleh =(float)canvas.getHeight()/(float)orginalheight();
    float scalew = ((float)canvas.getWidth()/(float)orginalwidth());
    canvas.drawRect(10*scaleh,9*scalew,20*scaleh,30*,scalewpaint);
}

此代码在错误的位置绘制矩形。有什么不对?

您应该从
图像视图
本身而不是
画布
中获取视图的尺寸,特别是当进一步的目标是在
图像视图
中绘制图像时

画布可以作为一种伪装,或者说是与现实世界的接口 您的图形将在其上绘制的曲面-它保存您的所有图形 “抽签”电话。通过画布,您的绘图实际上是在画布上执行的 放置在窗口中的基础位图

首先,为了获得坐标,为
ImageView
实现
onTouchListener
。这将为您提供X和Y坐标,以便在其上绘制
画布

imageView.setOnTouchListener(new OnTouchListener(){

@Override
public boolean onTouch(View v, MotionEvent event) {

int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
  xDown = event.getX();
  yDown = event.getY();
  break;
case MotionEvent.ACTION_MOVE:
  xUp = event.getX();
  uUp = event.getY();
  canvas.drawLine(xDown, yDown, xUp, uUp, paint);
  imageView.invalidate();
  xDown = xUp;
  yDown = uUp;
  break;
case MotionEvent.ACTION_UP:
  xUp = event.getX();
  uUp = event.getY();
  canvas.drawLine(xDown, yDown, xUp, uUp, paint);
  imageView.invalidate();
  break;
case MotionEvent.ACTION_CANCEL:
  break;
default:
  break;
}

return true;
}});
然后创建一个
画布
,在ImageView顶部绘制

//Create a new image bitmap and attach a brand new canvas to it
Bitmap tempBitmap = Bitmap.createBitmap(myBitmap.getWidth(), myBitmap.getHeight(), Bitmap.Config.RGB_565);
Canvas canvas = new Canvas(tempBitmap);

paint = new Paint();
paint.setColor(YOUR_DESIRED_COLOR);
paint.setStrokeWidth(INT_VALUE);
matrix = new Matrix();
canvas.drawBitmap(bmp, matrix, paint);

//Attach the canvas to the ImageView
imageViewsetImageBitmap(tempBitmap);
您还可以使用canvas.drawRect(左、上、右、下、绘制)如果您想简单地绘制矩形


希望能有所帮助。

你到底想实现什么目标?