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

Har*_*rry 5 java math android image pinchzoom

我正在研究图像,提供了一项功能,使用户可以在图像放置标签(例如Facebook照片标签)。我有一个可缩放的ImageView(使用Mike Ortiz的TouchImageView)作为背景图像,还有一些ImageViews作为图像标签。

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

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

float currentZoom = mImageView.getCurrentZoom();
float zoomedX = x / currentZoom;
float zoomedY = y / currentZoom;
Run Code Online (Sandbox Code Playgroud)

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

编辑:

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

图片

Har*_*rry 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];
Run Code Online (Sandbox Code Playgroud)