1. 程式人生 > >Android豎屏模式實現橫屏效果

Android豎屏模式實現橫屏效果

android橫豎屏切換是非常耗時間的,而且切換的過程也會存在明顯的翻轉卡頓效果,那麼是否可以在豎屏模式下實現橫屏的效果呢?答案是肯定的,這裡提供一種方法,其思路是對view進行90度的旋轉,而且實現起來非常簡單,其效果圖如下:


首先我們先在layout裡排版出一個水平的佈局,如下圖:


是不是很簡單?佈局程式碼如下:

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

    <LinearLayout
        android:id="@+id/layout_horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="hello my android , i'm obo" />

        <View
            android:layout_width="match_parent"
            android:layout_height="20dp"
            android:background="#FF0000" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="button" />
    </LinearLayout>
</LinearLayout>
以上程式碼中id為layout_horizontal的LinearLayout是我們將要進行旋轉的佈局。需要注意的是,待旋轉的佈局的父佈局必須是LinearLayout,比如這裡id為layout_horizontal的LinearLayout的外面還必須套一個LinearLayout。

activity中的程式碼非常簡單,思路是先獲取到螢幕的尺寸,然後將id為layout_horizontal的LinearLayout的尺寸進行主動的設定,其寬為螢幕的高,其高為螢幕的寬,之後再旋轉90度,旋轉完之後進行位移,這裡的位移是為了將旋轉後的佈局放置在螢幕中心。

public class HorizontalActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_horizontal);
        
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);      // 獲取螢幕的尺寸
        int width = displayMetrics.widthPixels;                         // 螢幕寬
        int height = displayMetrics.heightPixels;                       // 螢幕高

        LinearLayout layout = (LinearLayout) findViewById(R.id.layout_horizontal);  // 待旋轉佈局

        layout.setLayoutParams(new LinearLayout.LayoutParams(height, width));       // 設定佈局的寬和高,必須要和螢幕的反過來
        layout.setRotation(90);             // 順時針旋轉90度
        layout.setY((height - width) / 2);  
        layout.setX((width - height) / 2);  // 將佈局位移到螢幕中心
    }

}