我在RelativeLayout上有一个我想要动画的Android按钮。 动画当前使用ObjectAnimator完成,以在滚动事件上上下移动按钮50dp。
按钮的位置目前以编程方式使用
计算height = context.getResources().getDisplayMetrics().heightPixels
y = height - buttonheight - bottomMargin
我的问题是,在纵向模式下计算工作正常,但是当我切换到横向模式时,底部和按钮之间的距离大于纵向模式。
我错过了什么?
答案 0 :(得分:0)
在将按钮放在布局上之前尝试convert pixels to dp
:
public static float convertPxToDp(int px, Context context) {
final float scale = context.getResources().getDisplayMetrics().density;
float dp = (float) ((px - 0.5f) / scale);
return dp;
}
这应该有效!
答案 1 :(得分:0)
当您改变方向时,这是正确且明显的,您的高度计算值也会随着显示matrics.heightPixel在横向模式下返回更高的高度而改变。
height = context.getResources().getDisplayMetrics().heightPixels
它将返回更多值,因此将重新计算。如果你想在按钮和底部之间给出固定的空间值,那么你需要重新检查高度计算的想法。
答案 2 :(得分:0)
首先尝试将像素转换为dp,如下所示:
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);
float density = getResources().getDisplayMetrics().density;
float dpHeight = outMetrics.heightPixels / density;
float dpWidth = outMetrics.widthPixels/density;
然后我认为您必须在横向模式下更改算法
答案 3 :(得分:0)
转换为dp无效。
所以我的解决方案是在我的按钮周围包裹一个RelativeLayout,并相对于其固定的父按钮设置动画。
<RelativeLayout android:layout_width="56dp"
android:layout_height="85dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="13dp">
<Button
android:id="@+id/button"
android:layout_marginTop="10dp"
android:layout_width="56dp"
android:layout_height="56dp"/>
</RelativeLayout>