Java Android-在可缩放图像视图的顶部调整图像视图位置

Java Android-在可缩放图像视图的顶部调整图像视图位置,java,android,image,math,pinchzoom,Java,Android,Image,Math,Pinchzoom,我正在研究图像,制作一个功能,允许用户在图像上放置标签(比如Facebook照片标签)。我有一个可缩放的ImageView(使用)作为背景图像,还有一些ImageView作为图像标记 每个标签都有X和Y位置,在正确位置显示背景图像和图像标签没有问题。但是,当用户触发收缩缩放时,背景图像的位置会改变。这意味着,每个图像标签的位置也必须根据当前背景图像的缩放级别和滚动位置进行更改/更新 我目前正在使用此方法: float currentZoom = mImageView.getCurrentZoom

我正在研究图像,制作一个功能,允许用户在图像上放置标签(比如Facebook照片标签)。我有一个可缩放的ImageView(使用)作为背景图像,还有一些ImageView作为图像标记

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

我目前正在使用此方法:

float currentZoom = mImageView.getCurrentZoom();
float zoomedX = x / currentZoom;
float zoomedY = y / currentZoom;
但当我尝试时,它完全错了。有人能帮我找到正确的方法/方程式吗

编辑:

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

我终于得到了答案(多亏了)!要获得图像上的确切标记位置,我们只需使用矩阵.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];

使用Matrix.mapPoints()我以前试过。它给了我3x3矩阵,存储在一个float[]中。我可以从那里得到图像坐标以及它的缩放级别。但这并不能解决我的问题。在图像缩放和滚动后,如何找到图像标记的坐标?正如我所说的使用矩阵。mapPoints()使用两个浮点,因此输入数组的长度为2try矩阵m=tiv.getImageMatrix();float[]pts={0,0};m、 地图点(临时秘书处);看看“pts”中有什么,我把你的代码放在我代码中的“zoom listener”中。当我进行缩放(缩放比例为1.0941195)时,
float[]pts
为我提供
[0]=-33.788258
[1]=4.5877075
。你能解释一下这些值吗?不,不,不:
float[]pts={0,0}
只是为了测试,你需要使用标签的坐标
float[]pts={tagX,tagY}
如果我使用这种方法,图像标签完全被限制在背景图像的坐标上。这意味着,无论我滚动图像多少次,图像标签都保持在当前位置(这不是我想要的)。当我滚动图像时,标签位置会根据当前滚动位置进行更新。所以我需要使用一个固定的(0,0)坐标。不过还是要谢谢你!