java制作仿微信视频播放控件

所属分类: 软件编程 / java 阅读数: 54
收藏 0 赞 0 分享

此控件继承自 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();
  }
 
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

更多精彩内容其他人还在看

利用MultipartFile实现文件上传功能

这篇文章主要为大家详细介绍了利用MultipartFile实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java编程实现NBA赛事接口调用实例代码

这篇文章主要介绍了Java编程实现NBA赛事接口调用实例代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java编程之双重循环打印图形

这篇文章主要介绍了Java编程之双重循环打印图形,属于Java编程基础练习部分,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

java基础学习JVM中GC的算法

这篇文章主要介绍了java基础学习JVM中GC的算法,通过图文加深对GC算法思路的理解。
收藏 0 赞 0 分享

Java编程Post数据请求和接收代码详解

这篇文章主要介绍了Java编程Post数据请求和接收代码详解,涉及enctype的三种编码,post与get等相关内容,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Retrofit+Rxjava实现文件上传和下载功能

这篇文章主要介绍了Retrofit+Rxjava实现文件上传和下载功能,文中提到了单文件上传和多文件上传及相关参数的请求,需要的朋友参考下吧
收藏 0 赞 0 分享

Retrofit+Rxjava下载文件进度的实现

这篇文章主要介绍了Retrofit+Rxjava下载文件进度的实现,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

java检查服务器的连通两种方法代码分享

这篇文章主要介绍了java检查服务器的连通两种方法代码分享,涉及ping的介绍以及检查服务器连通的两种方法代码示例,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

Java/Android 获取网络重定向文件的真实URL的示例代码

本篇文章主要介绍了Java/Android 获取网络重定向文件的真实URL的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java并发编程之同步器代码示例

这篇文章主要介绍了java并发编程之同步器代码示例,分享了相关代码,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享
查看更多