文档章节

仿微信小视频播放控件

人生如歌
 人生如歌
发布于 2015/03/02 10:48
字数 334
阅读 1186
收藏 3

效果图如下:

变量如下:

private SurfaceHolder mSurfaceHolder;
private MediaPlayer mPlayer;

构造函数内获取 SurfaceHolder,并设置回调接口 Callback:

public MoviePlayerView(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  
  mSurfaceHolder = this.getHolder();
  mSurfaceHolder.addCallback(mSurfaceHolderCallback); // holder加入回调接口
  mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// setType必须设置,要不出错.
 }

 private Callback mSurfaceHolderCallback = new Callback() {
  @Override
  public void surfaceDestroyed(SurfaceHolder arg0) {
   mSurfaceHolder = null;
  }
  @Override
  public void surfaceCreated(SurfaceHolder arg0) {
   // TODO Auto-generated method stub
   mSurfaceHolder = arg0;
  }
  @Override
  public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
    int arg3) {
   // TODO Auto-generated method stub
   mSurfaceHolder = arg0;
  }
 };

自定义视频播放成功回调接口:

/**
 * 播放成功回调  
  * @date 2015-2-9
  */
 public interface OnPlayCompletionListener{
    public void onPlayCompletion();
 }

通过设置 MediaPlayer 播放视频:

/**
  * 播放视频
  * @param fileName 文件路径
  */
 public void play(String fileName, final OnPlayCompletionListener completionListener) {
  mPlayer = new MediaPlayer();
  mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
  mPlayer.setDisplay(mSurfaceHolder); // 定义一个SurfaceView播放它
  mPlayer.setOnCompletionListener(new OnCompletionListener() {
   @Override
   public void onCompletion(MediaPlayer arg0) {
    stop();
    if(completionListener != null)
     completionListener.onPlayCompletion();
    // canvas.drawColor(Color.TRANSPARENT,
    // PorterDuff.Mode.CLEAR);
   }
  });
  try {
   mPlayer.setDataSource(fileName);
   mPlayer.prepare();
  } catch (IllegalStateException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  mPlayer.start();
 }

至此,主要代码已贴出,其实相比视频录制(请看另一篇 仿微信小视频录制控件),视频播放相对简单,相信童鞋们一下就可以看明白。

完整代码请看:仿微信小视频播放控件

最近在运营一个有关反脆弱成长的个人公众号,欢迎关注

© 著作权归作者所有

共有 人打赏支持
人生如歌
粉丝 7
博文 15
码字总数 7993
作品 0
深圳
程序员
Android UI框架(中)

唯美清新的switch按钮 优雅的switch状态按钮 通用的引导页和轮播器 仿微信图片选择器 快捷设置沉浸式状态栏 复杂表格布局 最全的开源集合 阻尼效果的界面 炫酷的纸飞机下拉刷新控件 仿ios水滴...

Moosphon
2017/12/31
0
0
CSDN_LQR/LQRWeChat

重大消息!!! 新版高仿微信已经开源,因为基于融云SDK,使用了 Rxjava+Retrofit+MVP+Glide 等新技术开发,代码结构上可以完全不一样,所以另开了一个项目。新版高仿微信使用到了自动布局来...

CSDN_LQR
2017/02/07
0
0
未来2个月,博客文章大纲,一切与公司要求对口

我的小目标 在我的上篇博客,我总结了当前十多家名企的招聘要求,做了技术要求汇总,发现列出的果然是每条都能写进简历的。我立即转变了写博客的路线,不再像无头苍蝇一样心血来潮地写博客了...

翻滚吧李博
2017/12/05
0
0
Swift 3.0 高仿微信--LXFWeChat

Swift 3.0 高仿微信 模仿微信的导航栏 在navigationBar底部添加一个添加了渐变层的view let blurBackView = UIView()blurBackView.frame = CGRect(x: 0, y: -20, width: kScreenW, height: ......

LinXunFeng
2017/02/16
379
0
新手程序猿编程实战项目推荐「附源码下载」

仿今日头条客户端 小白学习编程,最简单的就是手撸一个新闻资讯客户端,这样的项目比较简单,容易实现 。写完一个这样的客户端,基本的Android控件和网络请求数据的使用,基本都已经掌握了。...

嘿你好夏天
2017/12/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

创建第一个react项目

sudo npm i -g create-react-app@1.5.2 create-react-app react-app cd react-apprm -rf package-lock.jsonrm -rf node_modules #主要是为了避免报错npm installnpm start......

lilugirl
今天
1
0
在浏览器中进行深度学习:TensorFlow.js (八)生成对抗网络 (GAN)

Generative Adversarial Network 是深度学习中非常有趣的一种方法。GAN最早源自Ian Goodfellow的这篇论文。LeCun对GAN给出了极高的评价: “There are many interesting recent development...

naughty
今天
0
0
搬瓦工镜像站bwh1.net被DNS污染,国内打不开搬瓦工官网

今天下午(2018年10月17日),继搬瓦工主域名bandwagonhost.com被污染后,这个国内的镜像地址bwh1.net也被墙了。那么目前应该怎么访问搬瓦工官网呢? 消息来源:搬瓦工优惠网->搬瓦工镜像站b...

flyzy2005
今天
3
0
SpringBoot自动配置

本篇介绍下,如何通过springboot的自动配置,将公司项目内的依赖jar,不需要扫描路径,依赖jar的情况下,就能将jar内配置了@configuration注解的类,创建到IOC里面 介绍下开发环境 JDK版本1.8 spr...

贺小五
今天
3
0
命令行新建Maven多项目

参考地址 # DgroupId 可以理解为包名# DartifactId 可以理解为项目名mvn archetype:generate -DgroupId=cn.modfun -DartifactId=scaffold -DarchetypeArtifactId=maven-archetype-quickst......

阿白
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部