【问题标题】:Android - Adjusting Image View Position on Top of a Zoomable Image ViewAndroid - 在可缩放图像视图顶部调整图像视图位置
【发布时间】:2014-12-26 08:03:34
【问题描述】:

我正在处理图像,制作一个允许用户在图像上放置标签(如 Facebook 照片标签)的功能。我有一个可缩放的 ImageView(使用 Mike Ortiz's TouchImageView)作为背景图像,还有一些 ImageViews 作为图像标签。

每个标签都有XY位置,在正确的位置显示背景图片和图片标签都没有问题。但是,当用户触发双指缩放时,背景图像的位置会发生变化。这意味着,每个图像标签的位置也必须根据当前背景图像的缩放级别滚动位置进行更改/更新。

我目前正在使用这种方法:

float currentZoom = mImageView.getCurrentZoom();
float zoomedX = x / currentZoom;
float zoomedY = y / currentZoom;

但是当我尝试时,它完全出错了。谁能帮我找到正确的方法/方程式?

编辑:

我尝试使用 Matrix.mapPoints(),但我不明白这个矩阵如何帮助我解决问题。这是一张更好解释的图片:

【问题讨论】:

  • 使用 Matrix.mapPoints()
  • 我之前试过。它给了我 3x3 矩阵,存储在 float[] 中。我可以从那里获得图像坐标及其缩放级别。但这并不能解决我的问题。图片缩放滚动后如何找到图片标签的坐标?
  • 正如我所说,使用 Matrix.mapPoints() 使用两个浮点数,因此输入数组的长度为 2
  • 尝试矩阵 m = tiv.getImageMatrix();浮动[] pts = {0, 0}; m.mapPoints(pts);并查看“pts”中的内容
  • 我将您的代码放在我的代码中的“缩放侦听器”中。当我进行缩放时(缩放比例为 1.0941195),float[] pts 给了我[0] = -33.788258[1] = 4.5877075。你能解释一下这些价值观吗?

标签: java android image math pinchzoom


【解决方案1】:

我终于得到了答案(感谢pskink)!要获得图像上的准确标签位置,我们所要做的就是使用 Matrix.mapPoints()。但仅此一项并不能在缩放后给出新的 XY 位置。我们必须将当前 XY 位置乘以 当前缩放级别 以获得“缩放后位置 ”。

换句话说:

Matrix matrix = mImageView.getImageMatrix();
float[] pts = {0, 0};
matrix.mapPoints(pts);
float newTagX = (tagX * currentZoom) + pts[0];
float newTagY = (tagY * currentZoom) + pts[1];

【讨论】:

  • 不,不,不:float[] pts = {0, 0} 只是为了测试你需要使用标签的坐标float[] pts = {tagX, tagY}
  • 如果我使用该方法,图像标签将完全限制在背景图像上的坐标中。这意味着,无论我滚动多少图像,图像标签都保持在当前位置(这不是我想要的)。我想要它,所以当我滚动图像时,标签位置会根据当前滚动位置进行更新。所以我需要使用一个固定的 (0, 0) 坐标。不过还是谢谢!
猜你喜欢
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多