我处理图片,制作一项功能,允许用户在图片上放置标签(如Facebook照片标签)。我有一个可缩放的ImageView(使用Mike Ortiz's TouchImageView)作为背景图像,有些ImageView作为图像标签。
每个标记都有 X 和 Y 位置,并且在正确位置显示背景图像和图像标记时没有问题。但是,当用户触发捏缩放时,背景图像的位置会发生变化。这意味着,每个图像标签的位置也必须根据当前背景图像的缩放级别和滚动位置进行更改/更新。
我目前正在使用这种方法:
float currentZoom = mImageView.getCurrentZoom();
float zoomedX = x / currentZoom;
float zoomedY = y / currentZoom;
但是当我尝试时,它完全错了。谁能帮我找到正确的方法/方程?
修改
我尝试使用 Matrix.mapPoints(),但我不明白这个矩阵如何帮助我解决问题。这是一张图片,可以更好地解释:
答案 0 :(得分:1)
我终于得到了答案(感谢pskink)!要获得图像上的确切标记位置,我们所要做的就是使用 Matrix.mapPoints()。但仅凭这一点就不会给新的 X &缩放后的 Y 位置。我们必须乘以当前的 X &带有当前缩放级别的 Y 位置,以获得" 缩放后的位置"。
换句话说:
Matrix matrix = mImageView.getImageMatrix();
float[] pts = {0, 0};
matrix.mapPoints(pts);
float newTagX = (tagX * currentZoom) + pts[0];
float newTagY = (tagY * currentZoom) + pts[1];