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

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

}

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
javaweb视频播放控件、java制作视频播放器、java制作音乐播放器、java视频播放器的制作、android 视频播放控件,以便于您获取更多的相关知识。

时间: 2024-10-24 10:26:42

java制作仿微信视频播放控件_java的相关文章

Java实现仿微信红包分配规则_java

最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指教. 算法介绍 一.红包金额限制       对于微信红包,我们知道没人随机的最小红包是1分,最大金额是200元,这里我们同样来设置红包的范围,下面代码我们统一金钱的单位为分. //最小红包额度 private static final int MINMONEY = 1; //最大红包额度 private static final int MAXMONEY

将VLC库封装为duilib的万能视频播放控件

转载请说明出处,谢谢~~     昨天封装好了基于webkit的浏览器控件,修复了duilib的浏览器功能的不足,而我的仿酷狗播放器项目中不光需要浏览器,同时也需要视频播放功能,也就是完成MV的功能.所以我打算封装个视频播放控件.     既然要封装视频播放控件,那就应该封装一个功能强大,不只是用在这个项目,也为将来可能出现的项目做准备.以前不怎么接触视频播放这块,所以查了很多资料.目前市场上90%的视频播放器都是基于这三个构架:MPC/HC架构 .mplayer架构 .VLC架构 .    关

文档-编写一个java程序,将webbrowser控件嵌入进去

问题描述 编写一个java程序,将webbrowser控件嵌入进去 用java语言编写一个程序实现从网页中找到文档链接并下载和删除.拜托各位啦 解决方案 http://blog.csdn.net/b_h_l/article/details/8266899

vs2008-VS2008制作多媒体播放器,WindowsMediaPlayer控件按钮出错

问题描述 VS2008制作多媒体播放器,WindowsMediaPlayer控件按钮出错 播放媒体后,按停止键(WindowsMediaPlayer),再将鼠标移至菜单栏(没有点击),立刻又继续播放 以下是部分代码: BOOL CPLAYERDlg::OnInitDialog() { CDialog::OnInitDialog(); SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon

java后台模拟网银遇到控件怎么办

问题描述 java后台模拟网银遇到控件怎么办 java模拟网银后台登录时,遇到登录控件,该怎么解决啊,是绕过,还是破解.求大神指点 解决方案 http://blog.csdn.net/lxf9601/article/details/6967167

java swing中无法添加控件

问题描述 java swing中无法添加控件 之前觉得是jdk的问题,重装之后依旧未果,求大神解答. 代码 这就是个很简单入门的demo,可是就是无法运行,运行之后会停止很久然后抛出下面的异常. import java.awt.Container; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.sw

用java代码对android view控件设置属性

问题描述 用java代码对android view控件设置属性 用java代码设置控件文本颜色 texeview.settextcolor(colorstatelist color) 请问传参传的对象怎么构建 用来描述颜色属性 解决方案 用TextView.setTextColor(int color),传入Color.BLUE等,或者直接传 int color = 0xFFFFFFFF; TextView.setTextColor(color). 这里color的ARGB自己定义 解决方案二:

java通过复选框控件数组实现添加多个复选框控件示例分享_java

思路如下: 创建JPanel面板对象:使用JPanel类的setLayout(0,4)方法设置网格布局管理器,即列数为4,行数自动调节:创建一个字符串型一维数组作为控件文本数组:创建一个JCheckBox型一维数组作为控件数组:使用for循环遍历控件数组,初始化数组中的复选框组件,使用JPanel类的add()方法把数组元素(即每个复选框)添加到面板中.代码如下: 复制代码 代码如下: package cn.edu.xidian.crytoll; import java.awt.BorderLa

Java框架SSH结合Easyui控件实现省市县三级联动示例解析_jquery

Easyui调用数据库实现省市县区三级联动的效果如果下 1.首先要设计数据库,如图所示.一个有4个字段code,note,pycode.code:行政区划代码,note:中文注释,pycode:拼音缩写. 其中code是由6个字段组成.如果是省级最后4位是0000,如果是地级市最后2位是00,其他是县区.  我已经把相关数据库代码上传到我的csdn资源中,需要的同学自行下载. 2.我用的是java.SSH框架结合Easyui控件 3.html代码如下 <tr> <td class=&qu