文档章节

仿微信小视频播放控件

人生如歌
 人生如歌
发布于 2015/03/02 10:48
字数 334
阅读 1172
收藏 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
深圳
程序员
CSDN_LQR/LQRWeChat

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

CSDN_LQR
2017/02/07
0
0
Android UI框架(中)

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

Moosphon
2017/12/31
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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0
jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
今天
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
13
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部