使用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm virtualenv和conda_pycharm添加环境变量

    pycharm virtualenv和conda_pycharm添加环境变量from: http://www.cnblogs.com/IDRI/p/6354237.htmlLinux:启动虚拟环境:sourceenv/bin/activate Windows:pipinstallvirtualenv创建虚拟环境目录env激活虚拟环境:C:\Python27\Scripts

    2022年8月26日
    5
  • oracle赋予dba用户权限_oracle给用户dba权限

    oracle赋予dba用户权限_oracle给用户dba权限很多时候我们用拥有DBA权限的用户从oracle数据库导出数据,那么再导入新的数据库时就还得需要DBA权限的用户,下面是如何创建一个新用户并授予DBA权限命令。1.用有dba权限的用户登录:sys用户2.创建一个新用户:createuserabcidentifiedby123456;3.授予DBA权限:grantconnect,resource,dbatoabc;ok,创建好了,就可以用abc这个用户登录了,abc用户拥有dba权限。select*fromdba_user

    2022年9月26日
    8
  • mysql日期格式转换_MySQL日期格式转换

    mysql日期格式转换_MySQL日期格式转换DATE_FORMAT(date,format):根据参数对date进行格式化。1234SELECTDATE_FORMAT(‘2016-01-1622:23:00′,’%W%M%Y’)SELECTDATE_FORMAT(‘2016-01-1622:23:00′,’%D%y%a%d%m%b%j’)SELECTDATE_FORMAT(‘2016-01-1622:23:00’…

    2022年6月15日
    26
  • 华为防火墙usg6000配置dhcp(华为交换机与防火墙互联配置)

    该场景,防火墙作为出口访问internet,然后接的傻瓜式交换机来连接下面的办公PC,属于一个简单的SOHO环境,一般在防火墙上面应用DHCP,也通常是这种情况,大点的环境则是交换机或者专门的DHCP服务器来做。1、防火墙初始化配置2、DHCP配置(基于全局的配置方式)3、防火墙策略+NAT配置,让下面PC能够访问Internet。4、测试1、防火墙初始化配置…

    2022年4月12日
    1.4K
  • 云服务器搭建_免费云服务器

    云服务器搭建_免费云服务器在前一篇的基础上,现在对服务器进行环境搭建,其实就是安装你需要的软件,配置环境变量,然后安装tomcat。环境搭建1、gitbash连接服务器(或者XShell等工具)2、搭建mysql环境

    2022年8月3日
    11
  • 计算机网络实验四访问控制列表NAT应用

    计算机网络实验四访问控制列表NAT应用计算机网络实验四访问控制列表NAT应用

    2022年7月23日
    15

发表回复

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

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