首页 > 其他分享 >android 播放视频

android 播放视频

时间:2024-06-14 21:58:52浏览次数:12  
标签:视频 播放 val pause duration android videoView

播放视频文件

新建一个activity_main.xml文件,文件中放置了3个按钮,分别用于控制视频的播放、暂停和重新播放。另外在按钮的下面又放置了一个VideoView,稍后的视频就将在这里显示。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    tools:context=".MainActivity"
    android:layout_height="match_parent"
    android:orientation="vertical">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    <android.widget.Button
        android:background="#2196F3"
        android:id="@+id/play"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="播放" />
    <android.widget.Button
        android:id="@+id/pause"
        android:background="#F44336"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="暂停" />
    <android.widget.Button
        android:id="@+id/replay"
        android:background="#FFEB3B"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="重播" />
    </LinearLayout>
        <VideoView
            android:id="@+id/videoView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

</LinearLayout>

我们看到,按钮使用线性布局(LinearLayout)进行排列,每个按钮的宽度为0dp,高度为wrap_content,权重(layout_weight)为1,这样它们会平均分配可用空间。
接下来的问题就是存放视频资源了,很可惜的是,VideoView不支持直接播放assets目录下的
视频资源,所以我们只能寻找其他的解决方案。res目录下允许我们再创建一个raw目录,像诸
如音频、视频之类的资源文件也可以放在这里,并且VideoView是可以直接播放这个目录下的
视频资源的。
现在右击app/src/main/res→New→Directory,在弹出的对话框中输入“raw”,完成raw目录
的创建,并把要播放的视频资源放在里面。这里我提前准备了一个video.mp4资源(资源下载
方式见前言),如图所示,你也可以使用自己准备的视频资源。
在这里插入图片描述
修改MainActivity类代码:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val uri = Uri.parse("android.resource://$packageName/${R.raw.video}")
        val videoView: VideoView = findViewById(R.id.videoView)
        val play: Button = findViewById(R.id.play)
        val replay: Button = findViewById(R.id.replay)
        val pause: Button = findViewById(R.id.pause)
        videoView.setVideoURI(uri)
        play.setOnClickListener {
            if (!videoView.isPlaying) {
                videoView.start()
            }
        }
        pause.setOnClickListener {
            if (videoView.isPlaying) {
                videoView.pause() // 暂停播放
            }
        }
        replay.setOnClickListener {
            if (videoView.isPlaying) {
                videoView.resume() // 重新播放
            }
        }
    }
}

代码很简单,通过Uri.parse方法解析视频资源的URI,并将其赋值给变量uri。接着,通过findViewById方法获取布局文件中的VideoView、Button控件,并分别赋值给变量videoView、play、replay和pause。效果图如下:
在这里插入图片描述

setOnPreparedListener的使用

实现一个显示视频时长的文字内容,先增加一个文本:

  <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView" />
videoView.setOnPreparedListener { mp ->
            // 当视频准备好开始播放时,会调用此方法
            val duration = mp.duration
            val minutes = duration / 1000 / 60
            val seconds = duration / 1000 % 60
            println("$duration 毫秒= $minutes 分钟又 $seconds 秒.")
            textView.text = StringBuilder("视频时长:$minutes 分钟 $seconds 秒")
        }

在这里插入图片描述

标签:视频,播放,val,pause,duration,android,videoView
From: https://blog.csdn.net/weixin_57057153/article/details/139588140

相关文章

  • # android studio启动虚拟机长时间无响应,无法启动
    问题虚拟设备长时间不响应,无法启动设备方案根据androidstudio启动虚拟器失败尝试删除锁文件失败,.android目录下不存在锁文件电脑内存或计算配置不足查看了模拟器需要的内存,我的电脑还有10GB,应该是绰绰有余模拟器版本不对重新下载了30版本的,依然不响应,真......
  • 自媒体(6)-短视频剪辑
    用剪映剪辑拍摄的魔术剪辑效果人穿墙而过。衣服掉落作为例子(可以根据这个拍摄手法)①全程拍摄②人跑向墙壁,直到挨着墙边③人走开把衣服扔到刚才人挨着墙的位置,衣服掉落④剪辑时把人挨着墙壁开始到衣服开始掉落的中间部分剪掉【如果文字描述不清楚,那么自己去抖音搜索一下,可以......
  • Android中EventBus简单使用
    综述消息总线又叫事件总线,被广泛的应用于各类项目之中.但是此处只概述Android体系中用到的框架.为什么项目会需要一个消息总线呢?一句话概括,在大多数常见项目中,随着项目变大,项目可能出现大量的跨页面,跨组件,跨线程,跨进程来传递消息与数据的需求.为了更方便的直......
  • 【Stable Diffusion】最新SD换脸插件ReActor,视频换脸全流程!流畅丝滑!【附插件及安装报
    今天,我给大家分享一个使用“ReActor”插件来进行视频换脸的案例。视频换脸的思路其实也很简单,其实就是把视频的每一帧都提取出来,然后把每一帧的图片都进行换脸,最后重新把这些图片重新合成一个视频。废话不多说,我们先来看看效果:生成效果原视频如下:杨幂:最后的效果:......
  • 【视频讲解】LSTM神经网络模型在微博中文文本评论情感分析和股市预测应用附代码数据
    全文链接:https://tecdat.cn/?p=36471原文出处:拓端数据部落公众号分析师:ShuaiFung本文将通过视频讲解,展示如何用python的LSTM模型对中文文本评论情感分析,并结合一个TensorFlow的长短期记忆神经网络(LSTM)、指数移动平均法预测股票市场和可视化实例的代码数据,为读者提供一套完整......
  • 夏季河湖防溺水新举措:青犀AI视频智能监控系统保障水域安全
    近日一则新闻引起大众关注,有网友发布视频称,假期在逛西湖时,发现水面上“平躺”漂浮着一名游客在等待救援。在事发3分钟内,沿湖救生员成功将落水游客救到了岸边。随着夏季的到来,雨水增多,各危险水域水位大幅上升,加上天气炎热,偷偷下湖游泳者屡禁不止,尤其是在水库、深水池塘、湖泊、河......
  • 寻找PS在线视频教程,阿卡德平台是您的首选
     在数字化时代,学习Photoshop(简称PS)已成为设计师、摄影师、艺术家和创意爱好者们的必备技能。然而,面对众多的学习资源和教程,如何选择一个高效、专业且易于理解的平台成为了一个重要的问题。今天,我将为您介绍一个优质的PS在线视频教程平台——阿卡德平台,助您轻松掌握PS......
  • 车载android开发 carservice(一)
    车载android开发carservice是什么?车载Android开发中的CarService是一个专门为汽车环境设计的系统服务。CarService通常是AndroidAutomotiveOS的一部分,提供一系列API和框架,允许开发人员构建与汽车相关的应用和服务。以下是CarService的一些主要功能和作用:车辆数据访问:C......
  • 04《android studio开发实战(第三版)》第七到十章阅读笔记
    第七章:持久化存储本章介绍了SharedPreferences的使用方法,它是一种轻量级的存储方案,用于保存简单的键值对数据,如用户设置和配置。 学习了如何创建SharedPreferences对象,使用getSharedPreferences()方法读取和写入数据,以及如何使用apply()和commit()提交修改。了解了如何在Andro......
  • python爬虫:实现动态网页的爬取,以爬取视频为例
    引言:爬虫也被称为网络蜘蛛(Spider),是一种自动化的软件程序,能够在互联网上漫游,按照一定的规则和算法抓取数据。爬虫技术广泛应用于搜索引擎、数据挖掘、信息提取等领域,是互联网技术的重要组成部分。摘要:作为爬虫的初学者,网页越简单越好,因为网页的结构越简单,则组织框架更清晰......