如何在自定义视图中重新定位和重新缩放图像后使用路径图像上的路径绘制?

时间:2017-10-04 09:48:30

标签: android canvas bitmap

我有一个自定义视图,我在其中加载位图图像。然后我做一些操作,如放大,缩小,旋转,拖动和更改位置等。在这些操作之后,我想用手指在位图上绘图。我为此使用了canvas.drawPath(mPath, mPaint)。如果我在屏幕上加载图像并开始绘制它完美有效,但如果我改变图像的位置或旋转它或放大或缩小;我的路径绘制的位置与我触及的位置不同。我的问题是这个问题的原因是什么,我该如何解决呢。

2 个答案:

答案 0 :(得分:0)

在更改您正在显示的图像之前,请保存画布的位置。 之后,恢复原来的位置。 像这样:

public void onDraw(Canvas c) {
  c.save();
  //Do your "image manipulation" logic
  c.restore();
  c.drawPath(mPath, mPaint);
}

答案 1 :(得分:0)

通过this question的回答拖动图像并重新定位和放大和缩小我的问题。

我在onTouchEvent方法中添加了以下代码。

float x = event.getX() / drawImage.getScaleX() - rect.left / drawImage.getScaleX();
float y = (event.getY()) / drawImage.getScaleY() - rect.top / drawImage.getScaleY();
float p = drawImage.getCenterX() / drawImage.getScaleX() - rect.left / drawImage.getScaleX();
float q = drawImage.getCenterY() / drawImage.getScaleY() - rect.top / drawImage.getScaleY();
float x1 = (float) ((x - p) * Math.cos(drawImage.getAngle()) + (y - q) * Math.sin(drawImage.getAngle()) + p);
float y1 = (float) ((y - q) * Math.cos(drawImage.getAngle()) - (x - p) * Math.sin(drawImage.getAngle()) + q);

这里drawImage是我的自定义drawable。 x1,y1是我正在搜索的实际坐标。

相关问题