计算不同屏幕和动画的Android TranslationY值

时间:2016-06-27 18:29:12

标签: c# android .net xamarin xamarin.android

我的应用程序中有更多选项的片段,除了一个显示“拉起更多选项”的小矩形外,我想要隐藏起来。此矩形停在屏幕底部。当用户将其拉起时,它会从底部弹出,但不会占据整个屏幕,只占底部的1/3左右。足以显示一些选项(复选框)。

我这样做并通过设置选项片段布局的TranslationY设置来工作,顺便说一下,它位于FrameLayout容器中,因此它位于屏幕的底部,只显示我的“拉出来”更多选项“文字。

然后,当他们提起这件事时,我会有一些动作事件将它带到我想要的地方。

这是问题,我可以使用硬编码的TranslationY设置在一个显示器上正常工作。例如,在密度为1.5(HDPI 240)和480x800屏幕的Galaxy S2上,这些是我的硬编码值。我不得不通过玩弄数字来找到它们。

int trackOptionsHome = 650; //Parked at bottom of screen.
int trackOptionsExtended = 450; //Extended out where I want it to.

再次,使用S2上的那些硬编码值,它可以正常工作,并且我想要的方式。但是,如果我现在尝试使用STILL HDPI(1.5 / 240)的其他设备,除了屏幕尺寸为480x640(3.5英寸),它将无法正常显示,这是预期的。那么我实现了这样的东西:

float trackOptionsHome = ((dMetrics.HeightPixels / dMetrics.Density) + 120);
float trackOptionsExtended = ((dMetrics.HeightPixels / dMetrics.Density) - 100);

这是为了尝试考虑不同的显示密度和尺寸。然后我试着在每个结尾处做数学,将我的片段定位在我想要的地方。但是,我得到了不一致的结果,数字仍然是任意的。我必须通过玩耍来找到它们。

这提出了两个问题: 1.我如何确保在不同的显示密度下得到我想要的结果,这是我目前所拥有的问题,因为我有相同的密度。 2.如何针对不同尺寸的屏幕正确缩放,这似乎是我的直接问题。

目前用于数学目的(我可以在得到答案后根据需要进行调整)让我们说我希望50px的片段从底部显示,当它处于原始位置时300px从底部显示,当扩展时。

这样做的正确方法是什么?

谢谢!

麦克

0 个答案:

没有答案