Этот элемент управления наследуется от SurfaceView и использует MediaPlayer для воспроизведения видео.
Небольшой интерфейс воспроизведения видео
MoviePlayerView.java
импортировать java.io.IOException;импортировать android.content.Context;импортировать android.media.AudioManager;импортировать android.media.MediaPlayer;импортировать android.media.MediaPlayer.OnCompletionListener;импортировать android.util.AttributeSet;импортировать android.view.SurfaceHolder ;импортировать android.view.SurfaceHolder.Callback;импортировать android.view.SurfaceView; /** * Управление воспроизведением видео *@author liuyinjun * @date 8 февраля 2015 г. */public class MoviePlayerView расширяет SurfaceView { Private SurfaceHolder mSurfaceHolder; Private MediaPlayer mPlayer; Public MoviePlayerView(Context context) { this(context, null }); public MoviePlayerView (контекст контекста, AttributeSet attrs) {this (context, attrs, 0 } public); MoviePlayerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mSurfaceHolder = this.getHolder(); mSurfaceHolder.addCallback(mSurfaceHolderCallback // держатель присоединяется к интерфейсу обратного вызова mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); ) ;// setType должен быть установлен, иначе ошибок не будет. } /** * Воспроизведение видео * @param fileName путь к файлу */ public void play(String fileName, Final OnPlayCompletionListenercompleteListener) { 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) завершениеListener.onPlayCompletion(); // Canvas.drawColor(Color. ПРОЗРАЧНЫЙ, // PorterDuff.Mode.CLEAR } }); mPlayer.setDataSource(fileName); mPlayer.prepare(); } catch (IllegalStateException e) { // Автоматически создаваемый блок catch e.printStackTrace(); } catch (IOException e) { // Автоматически создаваемый блок catch e .printStackTrace(); } mPlayer.start(); } Private void stop() { if (mPlayer != null) { mPlayer.release(); mPlayer = null; } } /** * Освобождение ресурсов*/ public void Release() { if (mPlayer != null) { mPlayer.release(); mPlayer = null } } частный обратный вызов mSurfaceHolderCallback = новый обратный вызов() { @ Переопределить public void SurfaceDestroyed (SurfaceHolder arg0) { mSurfaceHolder = null } @Override public void; SurfaceCreated(SurfaceHolder arg0) { // Автоматически созданная заглушка метода TODO mSurfaceHolder = arg0; } @Override public void SurfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { // Автоматически созданная заглушка метода TODO mSurfaceHolder = arg0; } } /** * Обратный вызов при успешном воспроизведении *@author liuyinjun * @date 9 февраля 2015 г. */ public интерфейс OnPlayCompletionListener { public void onPlayCompletion() } ;Выше приведено все содержание этой статьи, надеюсь, она вам всем понравится.