0

我需要一个旋转轮图形,它位于屏幕底部的一半,然后在用户采取行动时动画(旋转)。

我可以通过调用将车轮图形从屏幕上移开:

    Animation animation = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE, 0,Animation.ABSOLUTE,wheelPos, Animation.ABSOLUTE, wheelPos);
    animation.setDuration(1);
    animation.setFillAfter(true);
    wheel.startAnimation(animation);

没关系,我可以通过 LayoutParams 将宽度设置为我想要的任何值。

但是我怎样才能使不同屏幕尺寸的轮子尺寸相同呢?例如,我需要将车轮 Y 像素放置在屏幕之外(wheelPos 变量),但在 Nexus S 与 Nexus 7 上,我如何计算合适的 Y 值?

宽度也是如此,如何计算宽度以使其看起来完全相同?

我注意到 Catch android 应用程序https://catch.com/ - 如果我扩展他们的滚轮菜单,它的大小在 Nexus S 和 Nexus 7 上是相同的 - 他们是如何做到的?

4

1 回答 1

2

Catch 的开发者在这里。感谢您在此处向我们指出您的问题的电子邮件。

对于我们的滚轮菜单,其宽度和位置在 XML 布局文件中指定,使用dp/ dip(与密度无关的像素)。对于给定的尺寸,例如300dp,它在任何 Android 设备上都会显示为相同的尺寸;系统将根据设备的屏幕是低、中、高、xhigh 等密度来缩放该值。

所以,设置你的宽度和 Y 偏移dp,你应该很高兴。如果您愿意,您可以完全以编程方式完成:

final int wheelWidth = 300;
final int wheelYoffset = 64;

DisplayMetrics dm = getResources().getDisplayMetrics();

final float scaledWheelWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wheelWidth, dm);
final float scaledWheelYoffset = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, wheelYoffset, dm);

我个人发现将我的所有 UI 维度作为资源来维护要容易得多。我res/values/dimens.xml要补充:

<dimen name="wheel_width">300dp</dimen>
<dimen name="wheel_y_offset">64dp</dimen>

然后,如果我需要在代码中使用这些维度,我可以用一条线来抓取它们:

final float scaledWheelWidth = getResources().getDimensionPixelSize(R.dimen.wheel_width);
final float scaledWheelYoffset = getResources().getDimensionPixelOffset(R.dimen.wheel_y_offset);

使用dp布局是使 Android UI 能够很好地扩展到不同设备的关键原则之一,对于您希望用户触摸/交互的任何东西都特别重要,因为您可以在开发过程中调整命中目标并放心无论您的应用在什么设备上运行,它们的物理尺寸都将相似。

于 2013-01-03T20:40:16.223 回答