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