2011-08-05 136 views
5

我在图像视图控件中有图像。由于图像的x和y坐标连续变化,用户可以对该图像执行平移和缩放。有没有什么方法可以找出图像内部图像控制的当前设置的x和y坐标?任何有关它的代码都会更有益。如何获取图像控件中位图图像的x和y坐标?

+1

检查出来此链接可能会有所帮助..... http://stackoverflow.com/questions/2447564/detect-touch-on-bitmap – Uttam

回答

11

ImageView使用Matrix类来进行缩放(缩放)和平移(平移)。如果您可以获得矩阵,那么您可以检索放大/平移视图的(左侧,顶部)坐标。

代码的可缩放的&可平移延伸的ImageView是在计算器的一个posts

在该职位可你会看到扩展的ImageView类有矩阵用于缩放/平移一个成员变量。

您可以使用以下代码从矩阵中获取缩放/平移的ImagevIew(实际上是位图)的界限。

RectF r = new RectF(); 
matrix.mapRect(r); 
Log.i(TAG, "Rect " + r.left + " " + r.top + " " + r.right + " " + r.bottom + " " + mOverAllScale + " "); 

新添加的答案

要了解下面的代码,你需要去通过这个link和理解。

翻译

当用户拖曳图像时,屏幕坐标(绝对)和位图的坐标不同步。 [您写入位图的任何内容都通过画布显示(在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

+0

感谢词shash。请让我知道你的发现。 –

+0

编辑答案 – Shash316

+0

非常感谢Shash。 –

相关问题