Android如果通过系统自带的横竖屏切换是非常耗时间的,并且切换的过程也会存在明显的翻转卡顿效果。特别是在Viewpager中,如果有2个fragment,其中一个需要横向布局,而另一个则是竖屏布局,那如果调用系统的横竖屏切换用户体验会非常不友好。
这里提供2中方法来解决这个问题。
- 1.通过将layout中的根布局View进行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); // 将布局位移到屏幕中心 } }
但是这个方法如果内部嵌套较多的View后,会导致width和height计算不正确,如果把每个View都提取出来进行旋转虽然可以避免计算不正确,但未免太过麻烦。这里提供第二种方法
- 2.使用这个库可以旋转整个视图层次 GitHub - rongi/rotate-layout: Android layout that can rotate any view.
1.在gradle引入这个库 compile'rongi.rotate-layout:rotate-layout:2.0.0' 2.<com.github.rongi.rotate_layout.layout.RotateLayout //在layout中的需要旋转的根布局中 ... app:angle="90" > //旋转角度 <YourView /> </com.github.rongi.rotate_layout.layout.RotateLayout>