使用SurfaceView和MediaPlayer实现视频做为背景

使用SurfaceView和MediaPlayer实现视频做为背景

大家好,又见面了,我是全栈君。

场景:像我们在Uber应用开场,看到一一段视频作为開始。这样子让用户非常快投入应用使用的场景中去,这样的以视频作为开场的应用,我们是不是认为非常高大上呢,哈哈,事实上是使用了SerfaceView去载入一段小视频,然后使用mediaplayer进行播放。然后循环。

先上图吧。

效果图

这里我贴出主要代码的实现

import java.io.IOException;

import android.app.Activity;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

	private SurfaceView surfaceview;
	private Button btnGo;
	private MediaPlayer mediaPlayer;

	private int postion = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		findViewById();
		initView();
	}

	protected void findViewById() {
		// TODO Auto-generated method stub
		surfaceview = (SurfaceView) findViewById(R.id.surfaceView);
		btnGo = (Button) findViewById(R.id.btn_goto);

	}

	protected void initView() {
		// TODO Auto-generated method stub
		mediaPlayer = new MediaPlayer();
		surfaceview.getHolder().setKeepScreenOn(true);
		surfaceview.getHolder().addCallback(new SurfaceViewLis());
		btnGo.setOnClickListener(this);
	}

	private class SurfaceViewLis implements SurfaceHolder.Callback {

		@Override
		public void surfaceChanged(SurfaceHolder holder, int format, int width,
				int height) {

		}

		@Override
		public void surfaceCreated(SurfaceHolder holder) {
			if (postion == 0) {
				try {
					play();
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SecurityException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalStateException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

		@Override
		public void surfaceDestroyed(SurfaceHolder holder) {

		}

	}

	public void play() throws IllegalArgumentException, SecurityException,
			IllegalStateException, IOException {
		mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
		AssetFileDescriptor fd = this.getAssets().openFd("start.mp4");
		mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(),
				fd.getLength());
		mediaPlayer.setLooping(true);
		mediaPlayer.setDisplay(surfaceview.getHolder());
		// 通过异步的方式装载媒体资源
		mediaPlayer.prepareAsync();
		mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
			@Override
			public void onPrepared(MediaPlayer mp) {
				// 装载完成回调
				mediaPlayer.start();
			}
		});
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.btn_goto:
			startActivity(new Intent(this, OtherActivity.class));
			finish();
			break;
		default:
			break;
		}
	}
}

完整的demo请到我的github项目主页进行下载

https://github.com/paulzeng/surfaceviewbackground

点击打开链接

期待大家一起follow,增加更酷的效果!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115389.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql8.0压缩包安装教程(zarchiver怎么安装游戏)

    首先声明,这里是Mysql8.0.27版本、64位操作系统解压版mysql的下载及安装配置及修改初始密码。如果是其他版本的mysql安装,可以自行查找其他方法,记住搜索的时候最好加上是什么版本的,因为不同版本的mysql安装的时候有些命令是不同的,例如,mysql5.7的就搜索mysql5.7安装。话不多说,接下来就是我的mysql8.0.27版本的教程了。1.下载打开下载地址:https://dev.mysql.com/downloads/mysql/,找到箭头中的文件https:/

    2022年4月14日
    194
  • 分享67套基于Java开发的Java毕业设计实战项目(含源码+毕业论文)【新星计划】

    分享67套基于Java开发的Java毕业设计实战项目(含源码+毕业论文)【新星计划】【新星计划】分享67套基于Java开发的Java毕业设计实战项目(含源码+毕业论文)基于Java开发的Java毕业设计实战项目本文中的所有主题都来自互联网。如果您侵犯您的权利,请及时联系Blogger,博主将及时处理。投诉邮箱:1919101926@qq.com(没事勿扰,不接单,也没时间解决难题,谢谢配合)。文章目录->建议收藏关注+点赞<-基于Java开发的Java毕业设计实战项目前言Java毕业设计所用到的开发环境Java毕业设计项目简单介绍17套基于Java开发的[互

    2022年9月1日
    5
  • Java web实现video播放

    Java web实现video播放javaweb实现video播放1.前端的实现通过getQueryVariable获取url的参数(vid)functiongetQueryVariable(variable){varquery=window.location.search.substring(1);varvars=query.split(“&”);for(v…

    2022年7月7日
    64
  • python break和continue

    python break和continuebreak语句break语句是用来终止循环语句的,即哪怕循环条件没有称为False或序列还没有被完全递归,也停止执行循环语句。&gt;&gt;&gt;whileTrue:…s=input(‘Entersomething’)…ifs==’quit’:…break…print(‘aa’)…..

    2022年5月13日
    43
  • ForkJoin之RecursiveAction和RecursiveTask的简单使用

    ForkJoin之RecursiveAction和RecursiveTask的简单使用ForkJoin之RecursiveAction和RecursiveTask的简单使用Java提供的多线程可以提高CPU的利用率,现在的CPU都是多核多线程,如果不好好利用,只运行单线程程序,会使得CPU的其他核心空闲,浪费宝贵的计算机资源。编写好的程序不容易,编写好的多线程程序更难。JDK1.7开始,Java提供了Fork/Join框架,可以方便的将一个大任务拆分成多个小任务,利用多个线程…

    2022年9月15日
    2
  • 关于Web应用开发流程的总结「建议收藏」

    关于Web应用开发流程的总结「建议收藏」关于Web应用开发流程的总结

    2022年4月21日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号