java制作仿微信视频播放控件
更新时间:2015年04月01日 10:37:25 投稿:hebedich
这篇文章主要介绍了java制作仿微信视频播放控件的方法和代码分享,控件继承自SurfaceView,十分的实用,小伙伴们可以自由扩展。
此控件继承自 SurfaceView,利用 MediaPlayer 播放视频。
小视频播放界面

MoviePlayerView.java
import java.io.IOException;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
/**
* 视频播放控件
*@author liuyinjun
* @date 2015-2-8
*/
public class MoviePlayerView extends SurfaceView {
private SurfaceHolder mSurfaceHolder;
private MediaPlayer mPlayer;
public MoviePlayerView(Context context) {
this(context, null);
}
public MoviePlayerView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
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必须设置,要不出错.
}
/**
* 播放视频
* @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();
}
private void stop() {
if (mPlayer != null) {
mPlayer.release();
mPlayer = null;
}
}
/**
* 释放资源
*/
public void release() {
if (mPlayer != null) {
mPlayer.release();
mPlayer = null;
}
}
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;
}
};
/**
* 播放成功回调
*@author liuyinjun
* @date 2015-2-9
*/
public interface OnPlayCompletionListener{
public void onPlayCompletion();
}
}
以上所述就是本文的全部内容了,希望大家能够喜欢。
相关文章
Spring 容器初始化 register 与 refresh方法
这篇文章主要介绍了Spring 容器初始化 register 与 refresh方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下2022-07-07
java中http请求之restTemplate配置超时时间问题解决
这篇文章主要介绍了java中http请求之restTemplate配置超时时间,本文给大家分享三种解决方法,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2023-05-05
spring中@autowired、@Qualifier、@Primary注解的使用说明
这篇文章主要介绍了spring中@autowired、@Qualifier、@Primary注解的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11
Spring Boot 开发私有即时通信系统(WebSocket)
本文利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天2017-04-04


最新评论