TextureView+MediaPlayer的一個簡單播放器
阿新 • • 發佈:2018-12-21
1.佈局檔案:
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextureView android:id="@+id/textureView" android:layout_width="380dp" android:layout_height="300dp" android:text="Hello World!" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintVertical_bias="0.3" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <LinearLayout android:id="@+id/cc" app:layout_constraintBottom_toBottomOf="parent" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/horizontal" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="橫屏" /> <Button android:id="@+id/vertial" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="豎屏"/> </LinearLayout> <LinearLayout android:orientation="horizontal" app:layout_constraintBottom_toTopOf="@id/cc" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/play" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="播放" /> <Button android:id="@+id/pause" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="暫停"/> <Button android:id="@+id/goon" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="繼續"/> <Button android:id="@+id/restart" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="重播"/> </LinearLayout> </android.support.constraint.ConstraintLayout>
樣子大概是這樣的:
2.textureView設定監聽器,然後在監聽器裡做相應的處理即可。
textureView.setSurfaceTextureListener(surfaceTextureListener); private SurfaceTextureListener surfaceTextureListener = new SurfaceTextureListener() { @Override public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { if (mMediaPlayer == null){ return; } mMediaPlayer.setSurface(new Surface(surface)); } @Override public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { } @Override public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { if (mMediaPlayer != null){ mMediaPlayer.release(); mMediaPlayer = null; } return false; } @Override public void onSurfaceTextureUpdated(SurfaceTexture surface) { } };
在onSurfaceTextureAvailable()方法中可以獲取到suface物件,這就是mediaplayer所需的播放控制元件。下面就是media player的相關操作了。
private void initMediaPlayer() { AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE); int mVolumn = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); if (mMediaPlayer == null) { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { } }); mMediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { Toast.makeText(MainActivity.this,"播放完成!繼續從頭播放", Toast.LENGTH_SHORT).show(); restart(); } }); mMediaPlayer.setOnErrorListener(new OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { return false; } }); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setOnSeekCompleteListener(new OnSeekCompleteListener() { @Override public void onSeekComplete(MediaPlayer mp) { } }); mMediaPlayer.setVolume(mVolumn, mVolumn); } else { mMediaPlayer.reset(); } } private void play() { if (mMediaPlayer == null){ return; } if (mMediaPlayer.isPlaying()){ return; } try { mMediaPlayer.reset(); mMediaPlayer.setDataSource(this, Uri.parse(path)); mMediaPlayer.prepare(); mMediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } }
3.textureView還可以做一些view相關的功能,如平移,縮放,透明度,旋轉等等。
private void initTextureView() {
textureView.setAlpha(0.8f);
textureView.setScaleX(1);
textureView.setScaleY(0.8f);
textureView.setRotation(90);
}
這裡只是簡單的操作。。。