Android_利用SurfaceView + MediaPlayer开发最简单的播放器
2017-11-12 21:15
537 查看
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback { private SurfaceView mSurfaceView;//展示 视频的 private SurfaceHolder mHolder;// private SeekBar mSeekBar; private MediaPlayer mMeiaPlayer;//播放音视频的 private boolean flage = true; private MyRecever myRecever; private int[] arrInt = new int[]{R.raw.a,R.raw.a}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { mSurfaceView = (SurfaceView) findViewById(R.id.surfaceView); mHolder = mSurfaceView.getHolder(); mSeekBar = (SeekBar) findViewById(R.id.seekBar); mMeiaPlayer = MediaPlayer.create(this,R.raw.a); mHolder.addCallback(this);//为mHolder添加监听 //固定位置 mHolder.setKeepScreenOn(true); mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//设置类型 int duration = mMeiaPlayer.getDuration();//获取视频的总大小 mSeekBar.setMax(duration);//为SeekBar设置最大值 mSeekBar.setProgress(0);//为seekBar设置初始值 //注册广播 myRecever = new MyRecever(); IntentFilter filter = new IntentFilter(); filter.addAction("alice.phone"); registerReceiver(myRecever,filter); //为seekBar设置监听 mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { //到的位置 //b==true 是拖动的 b==false @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { if(b){ mMeiaPlayer.seekTo(i); } } //开始拖动 @Override public void onStartTrackingTouch(SeekBar seekBar) { mMeiaPlayer.pause();//暂停 } //停止拖动 @Override public void onStopTrackingTouch(SeekBar seekBar) { mMeiaPlayer.start(); } }); } public void onClick(View view) { switch (view.getId()){ case R.id.play_bt://播放按钮 if(mMeiaPlayer!=null && !mMeiaPlayer.isPlaying()){ mMeiaPlayer.start();//开始播放 } break; case R.id.pause_bt://暂停按钮 if(mMeiaPlayer!=null && mMeiaPlayer.isPlaying()){ mMeiaPlayer.pause();//暂停播放 } break; } } @Override public void surfaceCreated(SurfaceHolder surfaceHolder) { if(mMeiaPlayer!=null){ mMeiaPlayer.setDisplay(surfaceHolder);//视频在SurfaceView上面展示 绑定 } new MedaplayProgess().start();//启动子线程 } @Override public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) { } @Override public void surfaceDestroyed(SurfaceHolder surfaceHolder) { } class MedaplayProgess extends Thread{ @Override public void run() { super.run(); Intent intent = new Intent(); intent.setAction("alice.phone"); while (flage){ int currentPosition = mMeiaPlayer.getCurrentPosition();//获取当前进度 intent.putExtra("pross",currentPosition); if(currentPosition == mMeiaPlayer.getDuration()){ flage= false; } sendBroadcast(intent); } } } class MyRecever extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if(intent!=null){ int pross = intent.getIntExtra("pross", -1); mSeekBar.setProgress(pross);//为seekbar设置进度 } } } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(myRecever); if(mMeiaPlayer!=null){ mMeiaPlayer.release();//释放资源 mMeiaPlayer = null; } } }
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="alice.bw.com.surfacemedaplayerdemo.MainActivity">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="400dp" />
<SeekBar
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/play_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="播放" />
<Button
android:id="@+id/pause_bt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="暂停" />
</LinearLayout>
</LinearLayout>
相关文章推荐
- Android多媒体开发【1】-- 利用SurfaceView + MediaPlayer开发最简单的视频播放器
- Android多媒体开发【1】-- 利用SurfaceView + MediaPlayer开发最简单的视频播放器
- Android中使用SurfaceView+MediaPlayer+自定义的MediaController实现自定义的视屏播放器
- android视频播放(二) 利用android原生的MediaPlayer+SurfaceView
- android播放视频(三)利用原生的MediaPlayer+SurfaceView之提高
- android MediaPlayer SurfaceView 网络视频播放器
- Android SurfaceView+MediaPlayer 本地视频播放器
- android开发SurfaceView+MediaPlayer实现视频播放
- android视频播放(二) 利用android原生的MediaPlayer+SurfaceView
- Android SurfaceView+MediaPlayer 播放本地raw文件夹下的视频
- 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
- 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
- Android多媒体开发【2】-- 利用VideoView开发最简单的视频播放器
- android下面使用SurfaceView+ mediaPlayer播放视频
- 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
- Android - SurfaceView + MediaPlayer实现分段视频无缝播放
- Android 游戏开发之SurfaceView的简单使用
- 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
- android:使用SurfaceView游戏开发简单屏幕适配方法
- Android - SurfaceView + MediaPlayer实现分段视频无缝播放