实现 Android SurfaceView 横竖屏

整体流程

为了实现 Android SurfaceView 的横竖屏切换,我们需要进行以下步骤:

journey
    title 整体流程
    section 准备工作
        开发环境搭建
        创建 Android 项目
    section 实现横竖屏切换
        设置屏幕方向
        处理横竖屏切换事件

准备工作

在开始实现横竖屏切换之前,我们需要完成以下准备工作:

  1. 开发环境搭建:确保你的开发环境已经搭建好,包括 Android Studio 和相关的 SDK。
  2. 创建 Android 项目:创建一个新的 Android 项目,并在其中添加一个 SurfaceView。

实现横竖屏切换

设置屏幕方向

首先,我们需要在 AndroidManifest.xml 文件中设置 Activity 的屏幕方向,以便系统知道我们的应用支持横竖屏切换。

<activity
    android:name=".MainActivity"
    android:configChanges="orientation|screenSize"
    android:screenOrientation="sensor">
</activity>
  • android:configChanges="orientation|screenSize":告诉系统在屏幕方向或屏幕尺寸改变时不重新创建 Activity。
  • android:screenOrientation="sensor":允许根据设备方向自动旋转屏幕。

处理横竖屏切换事件

接下来,我们需要在 Activity 中处理横竖屏切换事件,以便在屏幕方向改变时重新设置 SurfaceView 的宽高等属性。

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        // 横屏处理逻辑
        surfaceView.getHolder().setFixedSize(width, height);
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        // 竖屏处理逻辑
        surfaceView.getHolder().setFixedSize(height, width);
    }
}
  • onConfigurationChanged() 方法:当屏幕方向改变时触发。
  • newConfig.orientation:获取当前屏幕方向。
  • surfaceView.getHolder().setFixedSize():设置 SurfaceView 的固定宽高。

类图

classDiagram
    class SurfaceView {
        - width: int
        - height: int
        + getHolder()
        + setFixedSize(w: int, h: int)
    }

通过以上步骤,我们就可以实现 Android SurfaceView 的横竖屏切换。希望这篇文章能够帮助到你,祝你编程顺利!