我已将预定位的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) - 但仍然没有运气。
如何实现这种缩放?
答案 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);