您的位置:首页 > 移动开发 > Android开发

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐