欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

片段中的 Android ViewPager 动态切换水平和垂直屏幕

最编程 2024-03-20 18:50:54
...

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>