Android颠倒布局或旋转180

时间:2012-02-08 18:45:12

标签: android layout rotation

我正在编写一款Android游戏,其中有2名玩家同时玩游戏。一名玩家以正常方式面对手机而另一名玩家正面朝下。

因为这是一个测验,我没有使用任何画布或图形。它只包含2个线性布局,其中一个应该是颠倒的。为此,我使用了:

android:rotation="180"

其中一个布局。

它在Eclipse中我的xml的图形视图上显示了颠倒但是当我在模拟器或手机上运行它时,它没有反转或旋转到180度。

XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" android:clipToPadding="false"
        android:rotation="180">

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    </LinearLayout>

</LinearLayout

Java代码

public class x extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

如何在不复杂的情况下旋转它。我目前正在使用api level 15,但我对API级别没有限制。

1 个答案:

答案 0 :(得分:1)

我建议你创建一个自定义布局来处理它上面的轮换onDraw()

public class RotatedLinearLayout extends RotatedLinearLayout {
   final boolean topDown;

   public RotatedLinearLayout (Context context){
   super(context);
   }

   public RotatedLinearLayout (Context context, AttributeSet attrs){
      super(context, attrs);
   }

   public RotatedLinearLayout (Context context, AttributeSet attrs, int defStyle){
      super(context, attrs,defStyle);
   }  


   @Override
   protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
      super.onMeasure(heightMeasureSpec, widthMeasureSpec);
      setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth());
   }

   @Override
   protected void onDraw(Canvas canvas){
      TextPaint textPaint = getPaint(); 
      textPaint.setColor(getCurrentTextColor());
      textPaint.drawableState = getDrawableState();

      canvas.save();

      if(topDown){
         canvas.translate(getWidth(), 0);
         canvas.rotate(180);
      }else {
         canvas.translate(0, getHeight());
         canvas.rotate(-180);
      }
      canvas.translate(getCompoundPaddingLeft(), getExtendedPaddingTop());
      getLayout().draw(canvas);
      canvas.restore();
  }
}

编写XML时,请使用VerticalRelativeLayout而不是您尝试创建的其他布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

    <path.to.package.RotatedLinearLayout 
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" android:clipToPadding="false"
        >

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

    </path.to.package.RotatedLinearLayout >

</LinearLayout