Zoomlayout: 获取可绘制坐标

创建于 2019-02-15  ·  10评论  ·  资料来源: natario1/ZoomLayout

你好,

非常感谢您为这个令人惊叹的图书馆付出辛勤工作。 我对结果和 API 非常满意,但是,我想在 ZoomImageView 中获取可绘制对象的 X 和 Y 坐标,因为我在 ZoomImageView 顶部绘制了一些圆圈,我希望它们与可绘制对象一起移动(缩放后也是如此)。 想想这个问题,因为你有一张地图 (ZoomImageView),在它上面你有一些图钉,当用户放大/缩小或平移视图时,它们必须保持相同的相对位置。 任何帮助将不胜感激。

谢谢你。

question stale

最有用的评论

Markus 是对的,但为了安全起见,您应该使用realZoom而不是zoom

所以要么你需要panXpanX * realZoom (或者减去这个,取决于你的计算)。 这取决于你如何绘制这些。

此外,根据您的绘图方式,您可能还需要考虑其他因素,例如屏幕尺寸/容器尺寸。 最后,这纯粹是一个数学问题,只需确保了解panXpanY是什么。

您还可以使用engine.addListener()来接收回调。

所有10条评论

您可以使用getPanXgetPanY获取坐标。

您可以使用getPanXgetPanY获取坐标。

这会起作用,但获取平移不考虑缩放比例因子。 我相信放大时坐标系统会被放大。在缩放和比例因子方面还有其他方法吗?

我认为您可以将它与zoom属性相乘。

我认为您可以将它与zoom属性相乘。

不准确,因为获取缩放和进行乘法不会考虑缩放中心枢轴(发生捏合的位置),因此这将根据枢轴的默认位置线性平移所有坐标。 我尝试在夹点位置重置枢轴 X 和 Y,但我没有走运。

当缩放布局顶部的视图相对于它具有固定位置时,为什么捏合的枢轴点很重要? 像缩放布局平移一样将视图移动到顶部,但反向移动是否足够? 当缩放布局被放大(即缩放> 1)时,顶部视图的平移将需要小于原始像素大小,因为正如您所说,缩放布局坐标将被放大(超出我的头顶我会认为您只需要将平移除以缩放系数)。

当缩放布局顶部的视图相对于它具有固定位置时,为什么捏合的枢轴点很重要? 像缩放布局平移一样将视图移动到顶部,但反向移动是否足够? 当缩放布局被放大(即缩放> 1)时,顶部视图的平移将需要小于原始像素大小,因为正如您所说,缩放布局坐标将被放大(超出我的头顶我会认为您只需要将平移除以缩放系数)。

使用平移和缩放时,叠加布局的引脚(在 zoomLayout 顶部)在对角线上被转置为线性转置。 我在这里想说的是,有时您会捏住销钉所在的位置,因此后者根本不应转置,但在我的情况下,无论乘法还是除法,它都只是在对角线上行进。 除此之外,我认为这个库需要添加几个回调,例如“onZoomUpdate -> zoom: Float”和“onViewPanUpdate -> float[x,y]”

Markus 是对的,但为了安全起见,您应该使用realZoom而不是zoom

所以要么你需要panXpanX * realZoom (或者减去这个,取决于你的计算)。 这取决于你如何绘制这些。

此外,根据您的绘图方式,您可能还需要考虑其他因素,例如屏幕尺寸/容器尺寸。 最后,这纯粹是一个数学问题,只需确保了解panXpanY是什么。

您还可以使用engine.addListener()来接收回调。

Markus 是对的,但为了安全起见,您应该使用realZoom而不是zoom

所以要么你需要panXpanX * realZoom (或者减去这个,取决于你的计算)。 这取决于你如何绘制这些。

此外,根据您的绘图方式,您可能还需要考虑其他因素,例如屏幕尺寸/容器尺寸。 最后,这纯粹是一个数学问题,只需确保了解panXpanY是什么。

您还可以使用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 天内没有进一步的活动,它将被关闭。 感谢你的贡献。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

YiHaoHuang picture YiHaoHuang  ·  10评论

lucasrsv picture lucasrsv  ·  3评论

kuoliangkwong picture kuoliangkwong  ·  4评论

natario1 picture natario1  ·  13评论

MohamedMedhat1998 picture MohamedMedhat1998  ·  6评论