我在image-view控件中有一张图片。用户可以对这张图片进行平移和缩放,因此图片的x和y坐标会不断变化。有没有办法找出图像控件内当前设置的x和y坐标?任何相关代码都将更加有益。
RectF r = new RectF();
matrix.mapRect(r);
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " ");
新添加的答案
要理解下面的代码,您需要查看此链接并理解。
翻译
当用户拖动图像时,屏幕坐标(绝对)和位图坐标不同步。 [您在位图上写入的任何内容都通过canvas(在onDraw()中)显示] 如果应用颜色,则用户会看到它应用于位图图像的不同区域。为了纠正这个问题,您需要进行翻译。翻译将更改用户输入坐标(即屏幕坐标)以使其成为位图坐标(由用户打算的) 以下代码片段将帮助您进行翻译。
假设用户输入坐标为(x,y),则:
RectF r = new RectF();
matrix.mapRect(r);
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " ");
float newX = x - r.left;
float newY = y - r.top;
您需要使用新的坐标代替(x,y)。
缩放
当用户捏合/拉伸时,位图会缩小/放大。您必须注意到原始位图不会发生变化,缩放仅从显示角度进行。 这再次导致屏幕和位图之间的同步丢失。应该在屏幕上应用的着色应反映在显示的图像中。 以下代码片段将帮助您进行缩放。
// mScalingFactor shall contain the scale/zoom factor
float scaledX = (event.getX() - r.left);
float scaledY = (event.getY() - r.top);
scaledX /= mScalingFactor;
scaledY /= mScalingFactor;
Shash