开启成长之旅!这是我参加「日新方案 2 月更文挑战」的第 1 天,点击检查活动概况

前言

新的一轮更文活动到来,这又激起了我的写文之心,正好能够参加,于是预备把这个安卓基础系列更完,这样压力也小许多,每天学习一个常识点即可,有些仍是已经运用娴熟的,温故而知新,让咱们一同看看安卓必备的基础常识!

正篇

视频播映是很平常的一件工作,但如安在APP中完结呢,其实蛮简略的,办法也许多,但作为基础的便是运用VideoView了,下面咱们来看看如何运用它。

安卓开发基础——实现最简单的视频播放

运用办法

首要咱们在项目中的res资源文件夹下新建一个新的文件夹“raw”

安卓开发基础——实现最简单的视频播放

然后咱们把MP4文件放到该文件夹下即可

安卓开发基础——实现最简单的视频播放

接着咱们先把布局完结,以方便后续操作,布局文件代码如下:

XML布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <VideoView
        android:id="@+id/videoView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/replay"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/str_replay"/>
        <Button
            android:id="@+id/play"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/str_play"/>
        <Button
            android:id="@+id/pause"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/str_pause"/>
    </LinearLayout>
</LinearLayout>

咱们在布局中把VideoView添加进去,然后再加三个按钮(play,replay,pause)来操控视频播映,用于重播,播映与暂停视频。

Activity文件代码如下:

package com.example.myapplication
import android.net.Uri
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.myapplication.databinding.ActivivtyPlayVideoBinding
class ActivityPlayVideo :AppCompatActivity() {
    lateinit var binding : ActivivtyPlayVideoBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivivtyPlayVideoBinding.inflate(layoutInflater)
        setContentView(binding.root)
        val uri = Uri.parse("android.resource://$packageName/${R.raw.video}")
        binding.videoView.setVideoURI(uri)
        //处理播映控件
        initVideo()
    }
    override fun onDestroy() {
        super.onDestroy()
        //开释
        binding.videoView.suspend()
    }
    private fun initVideo() {
        binding.replay.setOnClickListener {
            if (binding.videoView.isPlaying) {
                //从头播映
                binding.videoView.resume()
            }
        }
        binding.play.setOnClickListener {
            if (!binding.videoView.isPlaying) {
                //开端播映
                binding.videoView.start()
            }
        }
        binding.pause.setOnClickListener {
            if (binding.videoView.isPlaying) {
                //暂停播映
                binding.videoView.pause()
            }
        }
    }
}

写完布局文件,咱们再回到Activity文件中,把mp4文件经过Uri.parse()办法解析成Uri目标,然后用VideoView的setVideoURI()办法传入Uri目标即可完结初始化
接着,咱们经过它的start(),pause(),resume()以及suspend()办法完结视频的播映,暂停,重播以及开释资源,对应到咱们的三个按钮的点击事件。
其间,咱们用VideoView目标的isPlaying办法去判别当时视频是否在播映中。

最后咱们需要运用suspend()办法去开释咱们VideoView的占用资源:

override fun onDestroy() {
    super.onDestroy()
    binding.videoView.suspend()
}

这样,咱们就完结了一个简略的视频播映功能页面,也是最简单完结视频播映的办法了,这个控件其实是SurfaceView类的子类并完结MediaPlayerControl, SubtitleController.Anchor两个播映操控接口 ,而SurfaceView才是咱们真正的底层逻辑,也是常用于构建播映器的组件之一。

终究效果展示

最后,咱们运转程序后就有下面的效果:

经过三个按钮咱们就能自如的操控播映画面。

总结

这个控件限制蛮多的,许多格式视频不支持,并且也是封装后的,有时间能够再看看播映器相关的常识,下次再出一篇文章来详细说说。