【问题标题】:Scaling image of ImageView while maintaining center point in same place缩放 ImageView 的图像,同时将中心点保持在同一位置
【发布时间】:2011-07-08 11:59:31
【问题描述】:

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

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

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

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

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

如何实现这样的缩放?

【问题讨论】:

  • 我通过使用 4 个参数 matrix.postScale() 并为最后两个参数输入类似 View_width/2 和 View_height/2 的内容实现了居中缩放。没有意识到这最后两个参数可能是指视图的像素,而不是位图的像素

标签: android android-image android-imageview


【解决方案1】:

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

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

【讨论】:

  • 这两个问题和答案都是我的联盟:/我不使用任何画布,也没有覆盖任何缩放方法。
【解决方案2】:

也许这会有所帮助:

如果你有两个手指在屏幕上,你可以得到两个手指的事件并得到中间点:

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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2013-05-13
    • 2020-11-15
    相关资源
    最近更新 更多