文档章节

仿微信小视频播放控件

人生如歌
 人生如歌
发布于 2015/03/02 10:48
字数 334
阅读 1194
收藏 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
H5视频兼容安卓、IOS踩坑相关

1.视频暂停和播放 将JQ对象转换为原生JS对象 有遮罩层的视频播放和暂停 2.音乐开关 3.视频切换+音量播放 pug js 4.微信不能够自动播放 5.页面强制横屏问题 6.H5--移动端视频video的android兼...

谭瞎
07/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

龙芯jdk或java开发

龙芯的jdk安装包可以从www.loongnix.org下载。 4.支持的软件 龙芯JDK在每一次发布产品之前,都会使用一个应用程序列表进行兼容性测试,如表4-2所示。这个列表中既包含简单的Java应用程序,也...

gugudu
7分钟前
0
0
Docker + selenium + jenkins 并行跑自动化测试

背景 目标:使用docker做UI自动化测试并在Jenkins运行 调试环境:MocOS 运行环境:Linux ubuntu + docker 涉及工具:docker,selenium,unittest, jenkins 基本思路 找一个适合做自动化的doc...

呐呐丶嘿
11分钟前
1
0
android分辨率,屏幕尺寸,屏幕密度关系

名词定义分辨率分辨率就是手机屏幕的像素点数,一般描述成屏幕的“宽×高”,安卓手机屏幕常见的分辨率有480×800、720×1280、1080×1920等。720×1280表示此屏幕在宽度方向有720个像素...

GoldenVein
23分钟前
1
0
inux驱动的异步通知(kill_fasync,fasync)---- 驱动程序向应用程序发送信号

===========================应用程序========================= #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <poll.h> #include <sign......

天王盖地虎626
23分钟前
1
0
使用android studio时,ADB连接不上手机可能性之一

问题描述:as是通过adb连接手机进行调试了,如果电脑装了鲁大师,360等软件,可能会存在adb被这些软件占用的情况,所以会连接不上手机。这种解决方案有很多,比如通过任务管理器查看是谁占用...

白话
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部