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方法

    这篇文章主要介绍了Spring 容器初始化 register 与 refresh方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • java中http请求之restTemplate配置超时时间问题解决

    java中http请求之restTemplate配置超时时间问题解决

    这篇文章主要介绍了java中http请求之restTemplate配置超时时间,本文给大家分享三种解决方法,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 老生常谈比较排序之堆排序

    老生常谈比较排序之堆排序

    下面小编就为大家带来一篇老生常谈比较排序之堆排序。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • java实现jdbc批量插入数据

    java实现jdbc批量插入数据

    这篇文章主要为大家详细介绍了java实现jdbc批量插入数据,三种JDBC批量插入编程方法进行比较,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • java中的值传递和引用传递的区别分析

    java中的值传递和引用传递的区别分析

    本文介绍了“java中的值传递和引用传递的区别分析”,需要的朋友可以参考一下
    2013-03-03
  • Java ClassLoader类加载器基础详解

    Java ClassLoader类加载器基础详解

    这篇文章主要为大家介绍了Java ClassLoader类加载器基础详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • Java使用selenium爬取b站动态的实现方式

    Java使用selenium爬取b站动态的实现方式

    本文主要介绍了Java使用selenium爬取b站动态的实现方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • spring中@autowired、@Qualifier、@Primary注解的使用说明

    spring中@autowired、@Qualifier、@Primary注解的使用说明

    这篇文章主要介绍了spring中@autowired、@Qualifier、@Primary注解的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java NIO工作原理的全面分析

    Java NIO工作原理的全面分析

    JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的、面向块的 I/O。本实用教程从高级概念到底层的编程细节,非常详细地介绍了 NIO 库。您将学到诸如缓冲区和通道这样的关键 I/O 元素的知识,并考察更新后的库中的标准 I/O 是如何工作的。您还将了解只能通过 NIO 来完成的工作,如异步 I/O 和直接缓冲区。
    2013-02-02
  • Spring Boot 开发私有即时通信系统(WebSocket)

    Spring Boot 开发私有即时通信系统(WebSocket)

    本文利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天
    2017-04-04

最新评论