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); // 将布局位移到屏幕中心 } }