在保持中心点在同一位置的同时缩放ImageView的图像

时间:2011-07-08 11:59:31

标签: android android-image android-imageview

我已将预定位的Bitmap设置为ImageView的源。然后我读了ImageView的矩阵并通过matrix.postTranslate(shiftX, shiftY)移动了ImageView的位图。

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

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

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

即便发现,在matrix.postScale()函数之后,底层Bitmap的像素数没有变化,并尝试使用matrix.postTranslate(-zoomshiftX / zoom,-zoomshiftY / zoom) - 但仍然没有运气。

如何实现这种缩放?

scalling issue

2 个答案:

答案 0 :(得分:1)

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

Extending RelativeLayout, and overriding dispatchDraw() to create a zoomable ViewGroup

答案 1 :(得分: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);

然后你可以设置中间点在屏幕中心的scalation:

matrix.postScale(scale, scale, mid.x, mid.y);