Android 半屏幕旋转的机器人
我有一个纺车图形的要求,是一半的屏幕底部,然后动画(旋转)当用户采取行动 我可以通过调用以下命令将控制盘图形移出屏幕:Android 半屏幕旋转的机器人,android,image,screen-size,Android,Image,Screen Size,我有一个纺车图形的要求,是一半的屏幕底部,然后动画(旋转)当用户采取行动 我可以通过调用以下命令将控制盘图形移出屏幕: Animation animation = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE, 0,Animation.ABSOLUTE,wheelPos, Animation.ABSOLUTE, wheelPos); animation.setDuration(1); anim
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应用程序-如果我扩展他们的控制盘菜单,它的大小在Nexus s和Nexus 7上是相同的-他们是如何做到这一点的?Catch开发者在这里。谢谢你给我们发邮件,让我们知道你的问题 对于我们的控制盘菜单,其宽度和位置在XML布局文件中指定,使用
dp
/dip
(与密度无关的像素)。对于给定的维度,比如说,300dp
,它在任何Android设备上都会显示相同的大小;系统将根据设备的屏幕密度是低、中、高还是高等来缩放该值
因此,使用dp
设置宽度和Y偏移量,就可以开始了。如果愿意,您可以完全通过编程方式完成:
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>
使用dp
进行布局是制作能够很好地扩展到不同设备的Android UI的关键原则之一,对于您希望用户触摸/交互的任何东西都特别重要,因为您可以在开发过程中调整命中目标的大小,并且请放心,无论您的应用程序运行在什么设备上,它们的物理大小都是相同的
final float scaledWheelWidth = getResources().getDimensionPixelSize(R.dimen.wheel_width);
final float scaledWheelYoffset = getResources().getDimensionPixelOffset(R.dimen.wheel_y_offset);