在圆形区域xamarin android中移动/动画TextView

问题描述 投票:0回答:1

我有一个带有文字“O”的qazxsw poi。我想在圆形区域中移动/动画它,我不希望它超出该区域。我可以使用以下代码片段为其设置动画:

TextView

它将ObjectAnimator.OfFloat(txtTitle,"translationY",850).SetDuration(1000).Start(); 改为850.我也可以为translationY做到这一点,但它可以离开圆圈。翻译的价值(在代码中为850)是随机的,我认为850是px而不是dp。这是我的第一个问题。我无法使用dp值为对象设置动画。有没有办法解决它?

如果我能找到一种方法来移动具有dp值的对象,我可以使用一点点数学动画在圆圈内制作动画。但是如果没有办法,那么如何在圆形区域中动画/移动我的对象?

c# xamarin xamarin.android objectanimator
1个回答
0
投票

它可以脱离“圈子”的原因有两个:

首先,Android不包含翻译的空间限制。如果你愿意,你可以在屏幕上翻译一个项目(这通常是为了让小部件的印象从屏幕上消失)。您可以剪切到包含的布局或任何您喜欢的形状,因此项目不会在其外部绘制,但它仍然会在边缘消失,而不是被它包含。

其次,Android(和iOS)中的所有视觉元素实际上都是矩形,无论绘制什么。因此,即使您将窗口小部件绑定到包含布局的边缘,它仍将退出绘制的圆的边界,因为系统没有这个概念。

所以。您需要自己进行计算,并找出圆的边界,并确保“平移X和Y”永远不会超出它。请参阅此translationX以获取有关如何为圆圈执行此操作的参考。

然后你会发现你有一个额外的复杂性来解决你的翻译视图与圆形边界相交的位置并相应地进行调整(请记住,翻译后的视图实际上是一个包含“绘制对象”的矩形)。如果您的“绘制对象”是一个精确的圆,这很容易(您可以根据其半径进行调整)。鉴于您正在使用圆圈,您可能希望将标准笛卡尔坐标系转换为极坐标系并使用弧度。

如果您使用的是CV库,它可能会带有一种计算点或对象是否在某个区域内或两个区域相交的方法。您还可以在这里查看https://www.mathopenref.com/coordbasiccircle.html的一些提示。游戏库通常包含丰富的此类算法选择以完成此类操作,因此您可能还需要检查其中的一些(有几个开源库)。

除非您确实需要绘制字符,否则如果您想要精确的翻译效果,我会避免使用它们,因为排版具有您通常无法访问的内置填充。在您的情况下,使用环形Drawable作为View或FrameLayout的背景而不是TextView。

正如@ G.hakim所述,使用drawable作为背景是创建圆圈的最简单方法。如果你想要一些更复杂的东西,你必须创建自己的类并重写Draw或使用像https://en.m.wikipedia.org/wiki/Point_in_polygon这样的东西(顺便说一句,这很棒)。另外正如他所说,您可以使用标准转换轻松地在密度测量(dp和sp)和像素之间进行转换,如下所示:

SkiaSharp library

祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.