ImageView显示视频的第一帧图片VideoView视频播放

2024-01-07 14:50

本文主要是介绍ImageView显示视频的第一帧图片VideoView视频播放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ImageView显示视频的第一帧图片&&VideoView视频播放

我们在播放视频时,为了增强用户体验,在视频未播放时,需要显示视频的第一帧图片,增强用户体验。

效果如图:

image

在android中系统提供了一个类MediaMetadataRetriever,可以帮我们获取视频的第一帧数据,当然,其他帧图片也是可以获取的。下面来看具体代码:

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="200dp"android:orientation="vertical"><ImageView
        android:id="@+id/image"android:scaleType="fitXY"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"/><VideoView
        android:id="@+id/video"android:visibility="gone"android:layout_width="match_parent"android:layout_height="wrap_content"/><FrameLayout
        android:id="@+id/control"android:layout_width="match_parent"android:layout_height="match_parent"><ImageView
            android:layout_gravity="center"android:id="@+id/player"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@drawable/play"/></FrameLayout></FrameLayout>

具体代码:

public class MainActivity extends Activity {private ImageView mImage;private VideoView mVideo;private FrameLayout mControl;private ImageView mPlayer;private String mPlayerPath;private final int PLAY = 0;private final int PAUSE = 1;private final int COMPLETE = 2;private int state;private boolean isFirst = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mImage = (ImageView) findViewById(R.id.image);mVideo = (VideoView) findViewById(R.id.video);mControl = (FrameLayout) findViewById(R.id.control);mPlayer = (ImageView) findViewById(R.id.player);mControl.setBackgroundColor(0x66000000);mPlayer.setVisibility(View.VISIBLE);mPlayerPath = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/VID_20161103_113849.mp4";initImage();initListener();}private void initImage() {mVideo.setVisibility(View.GONE);mImage.setVisibility(View.VISIBLE);/*** MediaMetadataRetriever class provides a unified interface for retrieving* frame and meta data from an input media file.*/MediaMetadataRetriever mmr = new MediaMetadataRetriever();mmr.setDataSource(mPlayerPath);Bitmap bitmap = mmr.getFrameAtTime();//获取第一帧图片mImage.setImageBitmap(bitmap);mmr.release();//释放资源}private void initListener() {mControl.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (isFirst) {initVideo();isFirst = false;} else {if (mVideo.isPlaying()) {mVideo.pause();state = PAUSE;mControl.setBackgroundColor(0x66000000);mPlayer.setVisibility(View.VISIBLE);} else if (state != COMPLETE) {mVideo.start();state = PLAY;mControl.setBackgroundColor(Color.TRANSPARENT);mPlayer.setVisibility(View.GONE);} else {mVideo.resume();//从新开始播放state = PLAY;mControl.setBackgroundColor(Color.TRANSPARENT);mPlayer.setVisibility(View.GONE);}}}});}private void initVideo() {mVideo.setVisibility(View.VISIBLE);mImage.setVisibility(View.GONE);mVideo.setVideoPath(mPlayerPath);mVideo.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {mVideo.start();state = PLAY;mControl.setBackgroundColor(Color.TRANSPARENT);mPlayer.setVisibility(View.GONE);}});mVideo.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {@Overridepublic void onCompletion(MediaPlayer mp) {state = COMPLETE;mControl.setBackgroundColor(0x66000000);mPlayer.setVisibility(View.VISIBLE);}});}
}

这篇关于ImageView显示视频的第一帧图片VideoView视频播放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/580273

相关文章

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

使用 Python 和 LabelMe 实现图片验证码的自动标注功能

《使用Python和LabelMe实现图片验证码的自动标注功能》文章介绍了如何使用Python和LabelMe自动标注图片验证码,主要步骤包括图像预处理、OCR识别和生成标注文件,通过结合Pa... 目录使用 python 和 LabelMe 实现图片验证码的自动标注环境准备必备工具安装依赖实现自动标注核心

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

Qt QWidget实现图片旋转动画

《QtQWidget实现图片旋转动画》这篇文章主要为大家详细介绍了如何使用了Qt和QWidget实现图片旋转动画效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、效果展示二、源码分享本例程通过QGraphicsView实现svg格式图片旋转。.hpjavascript