我有一个Android按钮在RelativeLayout,我想动画。动画目前使用ObjectAnimator在滚动事件上上下移动按钮50dp来完成。
按钮的位置目前是用
编程计算的。height = context.getResources().getDisplayMetrics().heightPixels
y = height - buttonheight - bottomMargin
我的问题是,计算在纵向模式下工作得很好,但一旦我切换到横向模式,底部和按钮之间的距离比纵向模式大。
我错过了什么?
在将按钮放到布局之前尝试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;
}
这应该可以工作!
这是正确和明显的,当你将改变你的方向,你的高度计算值也将改变显示矩阵。在横向模式下,highightpixel将返回更多的高度。
height = context.getResources().getDisplayMetrics().heightPixels
它将返回更多的值,并相应地重新计算。如果你只想给按钮和底部之间的空间固定值,那么你必须重新检查你的高度计算方法
首先尝试像这样将像素转换为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;
那么我认为你必须在横屏模式下修改算法
无法转换为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>