package com.way.weather; import java.io.IOException; import android.content.Context; import android.content.res.AssetFileDescriptor; import android.graphics.SurfaceTexture; import android.media.MediaPlayer; import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.TextureView; public class TextureViewMediaAnim implements MediaPlayer.OnPreparedListener, TextureView.SurfaceTextureListener { private static final String TAG = "MediaAnim"; private String mAudioFileName; private MediaPlayer mAudioPlayer; private Context mContext; private boolean mIsStoped = false; private TextureView mTextureView; private String mVideoFileName; private MediaPlayer mVideoPlayer; private int isEffectMute = 0; public TextureViewMediaAnim(Context context, TextureView textureView) { Log.d(TAG, "MediaAnim: Constructor"); mContext = context; mTextureView = textureView; mTextureView.setSurfaceTextureListener(this); //mSurfaceHolder = mSurfaceView.getHolder(); // mSurfaceHolder.setType(3); //mSurfaceHolder.addCallback(this); } private void initAudioPlayer() { if (mAudioPlayer == null) { mAudioPlayer = new MediaPlayer(); } mAudioPlayer.setLooping(true); mAudioPlayer.setOnPreparedListener(this); mAudioPlayer.reset(); } private void initVideoPlayer() { if (mVideoPlayer == null) { mVideoPlayer = new MediaPlayer(); } mVideoPlayer.setLooping(true); mVideoPlayer.setVolume(0.0F, 0.0F); mVideoPlayer.setOnPreparedListener(this); mVideoPlayer.reset(); } private void prepareAudio() { try { if ((mAudioPlayer != null) && (isEffectMute != 0)) { if (mAudioFileName == null) { return; } mAudioPlayer.reset(); mAudioPlayer.setLooping(true); AssetFileDescriptor assetFileDescriptor = mContext.getAssets() .openFd(mAudioFileName); if (assetFileDescriptor != null) { mAudioPlayer.setDataSource( assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength()); assetFileDescriptor.close(); mAudioPlayer.prepare(); } } } catch (IOException e) { Log.e(TAG, "[prepareAudio] Unable to open file; error: " + e.getMessage(), e); releaseAudioPlayer(); } catch (IllegalStateException e) { Log.e(TAG, "[prepareAudio] Audio player is in illegal state; error: " + e.getMessage(), e); releaseAudioPlayer(); } } private void prepareVideo() { try { if (mVideoPlayer != null) { if (mVideoFileName == null) { return; } mVideoPlayer.reset(); mVideoPlayer.setLooping(true); mVideoPlayer.setVolume(0.0F, 0.0F); AssetFileDescriptor assetFileDescriptor = mContext.getAssets() .openFd(mVideoFileName); if (assetFileDescriptor != null) { mVideoPlayer.setDataSource( assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength()); assetFileDescriptor.close(); mVideoPlayer.prepare(); } } } catch (IOException e) { Log.e(TAG, "[prepareVideo] Unable to open file; error: " + e.getMessage(), e); releaseVideoPlayer(); } catch (IllegalStateException e) { Log.e(TAG, "[prepareVideo] Video player is in illegal state; error: " + e.getMessage(), e); releaseVideoPlayer(); } } private void releaseAudioPlayer() { if (mAudioPlayer != null) { mAudioPlayer.release(); mAudioPlayer = null; } } private void releaseVideoPlayer() { if (mVideoPlayer != null) { mVideoPlayer.release(); mVideoPlayer = null; } } public void destroy() { Log.d(TAG, "destroy()"); release(); mTextureView = null; } public void onPrepared(MediaPlayer paramMediaPlayer) { Log.d(TAG, "onPrepared "); if (!mIsStoped) { paramMediaPlayer.start(); } } public void play() { Log.d(TAG, "play(), mIsStoped = " + mIsStoped); prepareVideo(); prepareAudio(); } public void release() { releaseVideoPlayer(); releaseAudioPlayer(); } public void restart() { Log.d(TAG, "restart()"); if (mVideoPlayer != null) { mVideoPlayer.start(); } if (mAudioPlayer != null) { mAudioPlayer.start(); } } public void resume() { Log.d(TAG, "resume()"); mIsStoped = false; } public void setAudioFileName(String audioFileName) { mAudioFileName = audioFileName; } public void setEffectMute(int isMute) { isEffectMute = isMute; } public void setVideoFileName(String videoFileName) { mVideoFileName = videoFileName; } public void stop() { Log.d(TAG, "stop()"); mIsStoped = true; if (mVideoPlayer != null) { mVideoPlayer.stop(); } if (mAudioPlayer != null) { mAudioPlayer.stop(); } } @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { initVideoPlayer(); initAudioPlayer(); mVideoPlayer.setSurface(new Surface(surface)); play(); } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { // TODO Auto-generated method stub } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { // TODO Auto-generated method stub return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { // TODO Auto-generated method stub } }