2

我已将预缩放位图设置为 ImageView 的源。然后我ImageView通过matrix.postTranslate(shiftX, shiftY).

现在我想放大/缩小图像,同时将中心保持ImageView在比例之前的位图同一点。

如果我尝试用 放大图像matrix.postScale(zoom, zoom),我想要保持的点(蓝点)会移动到其他位置(紫点)。

我尝试了几种不同的方法将位图移回,但我无法让它正常工作。我知道初始位图大小、ImageView 大小、虚线标记的距离。试图计算所需的移位并在matrix.postTranslate(-zoomshiftX, -zoomshiftY)之后使用,但它没有正确移位。

甚至发现,在 matrix.postScale() 函数和尝试 matrix.postTranslate(-zoomshiftX/zoom, -zoomshiftY/zoom) 之后,底层位图的像素数没有改变 - 但仍然没有运气。

我如何实现这样的缩放?

缩放问题

4

2 回答 2

1

看看我关于创建可缩放 ViewGroup 的问题。我已经描述了我最终解决方案中的代码片段,其中一些可能会有所帮助。

扩展 RelativeLayout,并覆盖 dispatchDraw() 以创建可缩放的 ViewGroup

于 2011-07-08T12:02:30.400 回答
0

也许这会有所帮助:

如果屏幕上有两根手指,则可以获取两根手指的事件并获取中点:

PointF mid;
MotionEvent event;
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
mid.set(x / 2, y / 2);

然后您可以设置在屏幕中心具有中点的缩放:

matrix.postScale(scale, scale, mid.x, mid.y);
于 2014-04-18T20:23:29.240 回答