Android编程按钮以编程方式

时间:2014-08-01 08:57:34

标签: android position

我在RelativeLayout上有一个我想要动画的Android按钮。 动画当前使用ObjectAnimator完成,以在滚动事件上上下移动按钮50dp。

按钮的位置目前以编程方式使用

计算
height = context.getResources().getDisplayMetrics().heightPixels
y = height - buttonheight - bottomMargin

我的问题是,在纵向模式下计算工作正常,但是当我切换到横向模式时,底部和按钮之间的距离大于纵向模式。

我错过了什么?

4 个答案:

答案 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>