你好,
非常感谢您为这个令人惊叹的图书馆付出辛勤工作。 我对结果和 API 非常满意,但是,我想在 ZoomImageView 中获取可绘制对象的 X 和 Y 坐标,因为我在 ZoomImageView 顶部绘制了一些圆圈,我希望它们与可绘制对象一起移动(缩放后也是如此)。 想想这个问题,因为你有一张地图 (ZoomImageView),在它上面你有一些图钉,当用户放大/缩小或平移视图时,它们必须保持相同的相对位置。 任何帮助将不胜感激。
谢谢你。
您可以使用getPanX
和getPanY
获取坐标。
您可以使用
getPanX
和getPanY
获取坐标。
这会起作用,但获取平移不考虑缩放比例因子。 我相信放大时坐标系统会被放大。在缩放和比例因子方面还有其他方法吗?
我认为您可以将它与zoom
属性相乘。
我认为您可以将它与
zoom
属性相乘。
不准确,因为获取缩放和进行乘法不会考虑缩放中心枢轴(发生捏合的位置),因此这将根据枢轴的默认位置线性平移所有坐标。 我尝试在夹点位置重置枢轴 X 和 Y,但我没有走运。
当缩放布局顶部的视图相对于它具有固定位置时,为什么捏合的枢轴点很重要? 像缩放布局平移一样将视图移动到顶部,但反向移动是否足够? 当缩放布局被放大(即缩放> 1)时,顶部视图的平移将需要小于原始像素大小,因为正如您所说,缩放布局坐标将被放大(超出我的头顶我会认为您只需要将平移除以缩放系数)。
当缩放布局顶部的视图相对于它具有固定位置时,为什么捏合的枢轴点很重要? 像缩放布局平移一样将视图移动到顶部,但反向移动是否足够? 当缩放布局被放大(即缩放> 1)时,顶部视图的平移将需要小于原始像素大小,因为正如您所说,缩放布局坐标将被放大(超出我的头顶我会认为您只需要将平移除以缩放系数)。
使用平移和缩放时,叠加布局的引脚(在 zoomLayout 顶部)在对角线上被转置为线性转置。 我在这里想说的是,有时您会捏住销钉所在的位置,因此后者根本不应转置,但在我的情况下,无论乘法还是除法,它都只是在对角线上行进。 除此之外,我认为这个库需要添加几个回调,例如“onZoomUpdate -> zoom: Float”和“onViewPanUpdate -> float[x,y]”
Markus 是对的,但为了安全起见,您应该使用realZoom
而不是zoom
。
所以要么你需要panX
或panX * realZoom
(或者减去这个,取决于你的计算)。 这取决于你如何绘制这些。
此外,根据您的绘图方式,您可能还需要考虑其他因素,例如屏幕尺寸/容器尺寸。 最后,这纯粹是一个数学问题,只需确保了解panX
和panY
是什么。
您还可以使用engine.addListener()
来接收回调。
Markus 是对的,但为了安全起见,您应该使用
realZoom
而不是zoom
。所以要么你需要
panX
或panX * realZoom
(或者减去这个,取决于你的计算)。 这取决于你如何绘制这些。此外,根据您的绘图方式,您可能还需要考虑其他因素,例如屏幕尺寸/容器尺寸。 最后,这纯粹是一个数学问题,只需确保了解
panX
和panY
是什么。您还可以使用
engine.addListener()
来接收回调。
听起来不错,我会试一试。 非常感谢
@andromedcodes您是否能够在
这是我尝试过的:
ZoomImageView imgScreen;
Matrix m = new Matrix(imgScreen.getImageMatrix());
Drawable d = imgScreen.getDrawable();
RectF drawableRect = new RectF(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
RectF viewRect = new RectF(0, 0, imgScreen.getWidth(), imgScreen.getHeight());
m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
m.invert(m);
// Convert the points inside the image
float[] points = new float[2];
points[0] = event.getX(); //holds x coordinate of drawable
points[1] = event.getY(); //holds y coordinate of drawable
m.mapPoints(points);
但我不明白如何在那里调整平移和缩放值。 任何帮助,将不胜感激。 谢谢
此问题已自动标记为过时,因为它在过去 20 天内没有活动。 如果在接下来的 7 天内没有进一步的活动,它将被关闭。 感谢你的贡献。
最有用的评论
Markus 是对的,但为了安全起见,您应该使用
realZoom
而不是zoom
。所以要么你需要
panX
或panX * realZoom
(或者减去这个,取决于你的计算)。 这取决于你如何绘制这些。此外,根据您的绘图方式,您可能还需要考虑其他因素,例如屏幕尺寸/容器尺寸。 最后,这纯粹是一个数学问题,只需确保了解
panX
和panY
是什么。您还可以使用
engine.addListener()
来接收回调。