ImageView使用矩阵类进行缩放(缩放)和平移(平移)。 如果可以获取矩阵,则可以获取缩放/平移视图的“左、上”坐标。
可伸缩代码和pannable extended imageview (可在堆栈溢出开机自检中使用)
在此帖子中,您可以看到扩展的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。
缩放(缩放) ) )。
用户捏分/捏分时; 位图将缩小/放大。 必须观察原始位图保持不变,仅从显示角度进行缩放。
这将再次导致屏幕和位图之间的同步丢失。 应用于屏幕的着色必须反映在显示的图像中。
以下代码段有助于缩放。
//mscalingfactorshallcontainthescale/zoom factor
floatscaledx=(event.getx (-r.left ) );
floatscaledy=(event.gety (-r.top );
scaledX /=mScalingFactor;
scaledY /=mScalingFactor;
单词shash