gpt4 book ai didi

android - 如何在图像控件中获取位图图像的 x 和 y 坐标?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:01 24 4
gpt4 key购买 nike

我在 ImageView 控件中有一个图像。由于图像的 x 和 y 坐标不断变化,因此用户可以对该图像进行平移和缩放。有没有办法找出图像控件中图像的当前设置 x 和 y 坐标?任何有关它的代码都会更有用。

最佳答案

ImageView 使用 Matrix 类进行缩放(Zoom)和平移(pan)。如果您可以获取矩阵,则可以检索缩放/平移 View 的(左、上)坐标。

stackoverflow 之一提供了可缩放和平移扩展 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并理解。

翻译

当用户拖动图像时,屏幕坐标(绝对)和位图坐标不同步。 [您写入位图的任何内容都会通过 Canvas 显示(在 onDraw() 中)] 如果应用着色,用户会看到它被应用到位图图像的不同区域。要更正此问题,您需要进行翻译。翻译会将用户输入坐标(屏幕坐标)更改为位图坐标(如用户所期望的那样)以下代码 fragment 将帮助您进行翻译。

让用户输入坐标为 (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)。

缩放(缩放)

当用户捏合/捏合时;位图被缩小/放大。您必须观察到原始位图没有改变,缩放只是从显示的角度来看。这再次导致屏幕和位图之间的同步丢失。屏幕上应用的颜色应该反射(reflect)在显示的图像中。以下代码 fragment 将帮助您进行缩放。

// mScalingFactor shall contain the scale/zoom factor
float scaledX = (event.getX() - r.left);
float scaledY = (event.getY() - r.top);

scaledX /= mScalingFactor;
scaledY /= mScalingFactor;

哈希

关于android - 如何在图像控件中获取位图图像的 x 和 y 坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com