最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java制作仿微信視頻播放控件

 更新時(shí)間:2015年04月01日 10:37:25   投稿:hebedich  
這篇文章主要介紹了java制作仿微信視頻播放控件的方法和代碼分享,控件繼承自SurfaceView,十分的實(shí)用,小伙伴們可以自由擴(kuò)展。

此控件繼承自 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加入回調(diào)接口
    mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);// setType必須設(shè)置,要不出錯(cuò).
 
  }
   
  /**
   * 播放視頻
   * @param fileName 文件路徑
   */
  public void play(String fileName, final OnPlayCompletionListener completionListener) {
    mPlayer = new MediaPlayer();
    mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    mPlayer.setDisplay(mSurfaceHolder); // 定義一個(gè)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;
    }
  };
   
  /**
   * 播放成功回調(diào)
  *@author liuyinjun
   
  * @date 2015-2-9
   */
  public interface OnPlayCompletionListener{
    public void onPlayCompletion();
  }
 
}

以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • Spring?容器初始化?register?與?refresh方法

    Spring?容器初始化?register?與?refresh方法

    這篇文章主要介紹了Spring?容器初始化?register?與?refresh方法,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • java中http請(qǐng)求之restTemplate配置超時(shí)時(shí)間問(wèn)題解決

    java中http請(qǐng)求之restTemplate配置超時(shí)時(shí)間問(wèn)題解決

    這篇文章主要介紹了java中http請(qǐng)求之restTemplate配置超時(shí)時(shí)間,本文給大家分享三種解決方法,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • 老生常談比較排序之堆排序

    老生常談比較排序之堆排序

    下面小編就為大家?guī)?lái)一篇老生常談比較排序之堆排序。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • java實(shí)現(xiàn)jdbc批量插入數(shù)據(jù)

    java實(shí)現(xiàn)jdbc批量插入數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)jdbc批量插入數(shù)據(jù),三種JDBC批量插入編程方法進(jìn)行比較,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • java中的值傳遞和引用傳遞的區(qū)別分析

    java中的值傳遞和引用傳遞的區(qū)別分析

    本文介紹了“java中的值傳遞和引用傳遞的區(qū)別分析”,需要的朋友可以參考一下
    2013-03-03
  • Java ClassLoader類(lèi)加載器基礎(chǔ)詳解

    Java ClassLoader類(lèi)加載器基礎(chǔ)詳解

    這篇文章主要為大家介紹了Java ClassLoader類(lèi)加載器基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java使用selenium爬取b站動(dòng)態(tài)的實(shí)現(xiàn)方式

    Java使用selenium爬取b站動(dòng)態(tài)的實(shí)現(xiàn)方式

    本文主要介紹了Java使用selenium爬取b站動(dòng)態(tài)的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • spring中@autowired、@Qualifier、@Primary注解的使用說(shuō)明

    spring中@autowired、@Qualifier、@Primary注解的使用說(shuō)明

    這篇文章主要介紹了spring中@autowired、@Qualifier、@Primary注解的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java NIO工作原理的全面分析

    Java NIO工作原理的全面分析

    JDK 1.4 中引入的新輸入輸出 (NIO) 庫(kù)在標(biāo)準(zhǔn) Java 代碼中提供了高速的、面向塊的 I/O。本實(shí)用教程從高級(jí)概念到底層的編程細(xì)節(jié),非常詳細(xì)地介紹了 NIO 庫(kù)。您將學(xué)到諸如緩沖區(qū)和通道這樣的關(guān)鍵 I/O 元素的知識(shí),并考察更新后的庫(kù)中的標(biāo)準(zhǔn) I/O 是如何工作的。您還將了解只能通過(guò) NIO 來(lái)完成的工作,如異步 I/O 和直接緩沖區(qū)。
    2013-02-02
  • Spring Boot 開(kāi)發(fā)私有即時(shí)通信系統(tǒng)(WebSocket)

    Spring Boot 開(kāi)發(fā)私有即時(shí)通信系統(tǒng)(WebSocket)

    本文利用Spring Boot作為基礎(chǔ)框架,Spring Security作為安全框架,WebSocket作為通信框架,實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)聊天和群聊天
    2017-04-04

最新評(píng)論

双峰县| 黄陵县| 怀远县| 长治县| 沁阳市| 手游| 绍兴县| 天门市| 金山区| 太和县| 嫩江县| 齐齐哈尔市| 永新县| 新沂市| 沽源县| 弥渡县| 随州市| 沭阳县| 山东| 乐都县| 专栏| 温泉县| 教育| 荥经县| 确山县| 来凤县| 辽宁省| 囊谦县| 花莲县| 那曲县| 文成县| 巴塘县| 常州市| 仲巴县| 滨海县| 定襄县| 贵州省| 敖汉旗| 驻马店市| 阿图什市| 沈丘县|