You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中如何录制Activity内特定布局的视频?

当然有靠谱的实现方法啦!针对你想录制Activity里TextView动画的需求,我整理了几种Android平台上的方案,从一键操作到代码自定义都有,你可以按需选:

方案1:用系统自带录屏(最快上手,零代码)

这绝对是最省事儿的办法,完全不用改代码:

  • 打开你的应用,进到目标Activity,准备好触发动画的条件
  • 下拉通知栏,找到「屏幕录制」(不同品牌可能叫「录屏」,找不到的话去系统设置里搜就行)
  • 点击开始录制,触发动画,等动画跑完再停止录制,视频会自动存到相册或者文件管理器里
  • 优点:操作简单,不用碰代码;缺点:会录整个屏幕,要是只想保留动画区域,后期得剪一下
方案2:用MediaProjection API自定义录屏(精准控制录制区域)

如果你想精准只录LinearLayout那块儿的动画,或者要在代码里自动触发录制,那Android原生的MediaProjection API就很合适,步骤如下:

  1. 先在Manifest里加权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 不需要录声音可以删掉这条 -->
<uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
  1. 请求录屏权限并初始化录制逻辑(以Kotlin为例):
private val REQUEST_CODE_SCREEN_RECORD = 1001

// 触发录屏权限请求
fun startAnimationRecording() {
    val mediaProjectionManager = getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager
    val intent = mediaProjectionManager.createScreenCaptureIntent()
    startActivityForResult(intent, REQUEST_CODE_SCREEN_RECORD)
}

// 处理权限请求结果
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_CODE_SCREEN_RECORD && resultCode == RESULT_OK) {
        // 获取你要录制的LinearLayout区域
        val targetLayout = findViewById<LinearLayout>(R.id.target_linear_layout)
        val layoutRect = Rect()
        targetLayout.getGlobalVisibleRect(layoutRect)
        
        // 初始化MediaRecorder,配置录制参数
        val mediaRecorder = MediaRecorder().apply {
            setVideoSource(MediaRecorder.VideoSource.SURFACE)
            setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
            setVideoEncoder(MediaRecorder.VideoEncoder.H264)
            setVideoSize(layoutRect.width(), layoutRect.height())
            setVideoFrameRate(30) // 保证动画流畅度
            setOutputFile(getRecordingFilePath()) // 设置视频保存路径
        }
        
        // 用MediaProjection创建虚拟显示,把布局内容渲染到录制Surface
        val mediaProjection = (getSystemService(MEDIA_PROJECTION_SERVICE) as MediaProjectionManager)
            .getMediaProjection(resultCode, data!!)
        val virtualDisplay = mediaProjection.createVirtualDisplay(
            "AnimationRecord",
            layoutRect.width(), layoutRect.height(), resources.displayMetrics.densityDpi,
            DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
            mediaRecorder.surface, null, null
        )
        
        // 开始录制
        mediaRecorder.prepare()
        mediaRecorder.start()
        
        // 记得在动画结束后停止录制,比如在TextView的动画回调里:
        // mediaRecorder.stop()
        // mediaRecorder.release()
        // virtualDisplay.release()
        // mediaProjection.stop()
    }
}

// 生成视频保存路径
private fun getRecordingFilePath(): String {
    val moviesDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES)
    val videoFile = File(moviesDir, "text_animation_${System.currentTimeMillis()}.mp4")
    return videoFile.absolutePath
}
  • 温馨提示:Android 10及以上版本建议用MediaStore来保存文件,避免存储权限问题;另外要注意处理好组件的生命周期,别造成内存泄漏哦
方案3:用第三方库简化开发

要是觉得原生API太繁琐,也可以用第三方录屏库,比如ScreenRecorder这类,它们封装了MediaProjection的复杂逻辑,几行代码就能实现区域录制,不过选的时候要注意库的维护状态和兼容性哦


附上你提供的布局代码片段(补全了部分省略内容并添加了ID方便后续操作):

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical">

    <LinearLayout 
        android:id="@+id/target_linear_layout"
        android:layout_width="match_parent" 
        android:layout_height="0dp" 
        android:layout_weight="0.8" 
        android:gravity="center">

        <TextView
            android:id="@+id/animated_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="带动画的文本"/>

    </LinearLayout>

    <!-- 其他布局内容 -->
</LinearLayout>

内容的提问来源于stack exchange,提问作者Parth Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:00:51