首先是添加权限
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.WRITE_APN_SETTINGS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Xml布局的规划
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:orientation="vertical"
tools:context=".MainActivity">
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
android:layout_alignParentTop="true"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/biaoti"
android:textColor="@color/colorAccent"
android:textSize="20sp"
android:text="< 视频播放"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<ImageView
android:id="@+id/imageView"
android:layout_centerInParent="true"
android:src="@mipmap/ic_launcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/linear"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="60dp"
android:orientation="horizontal">
<Button
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="play" />
<Button
android:id="@+id/pasue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="pasue" />
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="stop" />
</LinearLayout>
<SeekBar
android:layout_above="@id/linear"
android:id="@+id/seekBar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
定义一个MyClickListener.java,用来对控件的点击和双击的判断和使用
public class MyClickListener implements View.OnTouchListener {
private static int timeout=400;//双击间四百毫秒延时
private int clickCount = 0;//记录连续点击次数
private Handler handler;
private MyClickCallBack myClickCallBack;
public interface MyClickCallBack{
void oneclick();//点击一次
void doubleClick();//点击两次
}
public MyClickListener(MyClickCallBack myClickCallBack){
this.myClickCallBack=myClickCallBack;
handler=new Handler();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction()==MotionEvent.ACTION_DOWN){
clickCount++;
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (clickCount==1){
myClickCallBack.oneclick();
}else if (clickCount==2){
myClickCallBack.doubleClick();
}
handler.removeCallbacksAndMessages(null);
clickCount=0;
}
},timeout);
}
return false;
}
}
最后是MainActivity的写入
public class MainActivity extends AppCompatActivity implements View.OnClickListener, MyClickListener.MyClickCallBack {
private SurfaceView mSurfaceView;
private Button mPlay;
private Button mPasue;
private Button mStop;
private SurfaceHolder surfaceHolder;
private MediaPlayer mediaPlayer;
private boolean noPlay = true;
private boolean playStare = true;
private SeekBar seekBar;
private TextView mBiaoti;
private ImageView mImageView;
//更改广播的进度
private String TAG = "tag";
private boolean flag = true;
private ProgressReceiver receiver;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//全屏显示
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
mSurfaceView = findViewById(R.id.surfaceView);
seekBar = findViewById(R.id.seekBar);
mBiaoti = findViewById(R.id.biaoti);
mImageView = findViewById(R.id.imageView);
//控制视频的按钮
mPlay = findViewById(R.id.play);
mPasue = findViewById(R.id.pasue);
mStop = findViewById(R.id.stop);
//隐藏所有的控件
mPlay.setVisibility(View.GONE);
mPasue.setVisibility(View.GONE);
mStop.setVisibility(View.GONE);
seekBar.setVisibility(View.GONE);
mBiaoti.setVisibility(View.GONE);
mImageView.setVisibility(View.GONE);
receiver = new ProgressReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("alice.com.player");
registerReceiver(receiver, filter);
mediaPlayer = new MediaPlayer();
surfaceHolder = mSurfaceView.getHolder();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
//设置点击事件
mSurfaceView.setOnTouchListener(new MyClickListener(this));
mPlay.setOnClickListener(this);
mPasue.setOnClickListener(this);
mStop.setOnClickListener(this);
mImageView.setOnClickListener(this);
//视频的长度
int duration = mediaPlayer.getDuration();
Log.i(TAG, "onCreate: 长度=" + duration);
seekBar.setMax(25877);
seekBar.setProgress(0);
// 拖动改变视频播放进度
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
Log.i("tag", "onProgressChanged: " + i);
if (b)
mediaPlayer.seekTo(i);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
mediaPlayer.pause();
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mediaPlayer.start();
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.pasue:
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
break;
case R.id.play:
if (noPlay) {
play();
noPlay = false;
} else {
mediaPlayer.start();
}
break;
case R.id.stop:
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
noPlay = true;
}
break;
case R.id.imageView:
if (mediaPlayer.isPlaying()) {
mediaPlayer.start();
}
break;
}
}
private void play() {
mediaPlayer.reset();
mediaPlayer.setDisplay(surfaceHolder);
try {
mediaPlayer.setDataSource(Environment.getExternalStorageDirectory() + "/a.mp4");
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mediaPlayer.start();
new MyThread().start();
// new MyThread2().start();
}
@Override
protected void onDestroy() {
if (mediaPlayer != null) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
mediaPlayer.release();
}
super.onDestroy();
}
@Override
public void oneclick() {
int visibility = mPlay.getVisibility();
Log.i(TAG, "oneclick: visibility===" + visibility);
if (visibility == 0) {
mPlay.setVisibility(View.GONE);
mPasue.setVisibility(View.GONE);
mStop.setVisibility(View.GONE);
seekBar.setVisibility(View.GONE);
mBiaoti.setVisibility(View.GONE);
mImageView.setVisibility(View.GONE);
} else {
mPlay.setVisibility(View.VISIBLE);
mStop.setVisibility(View.VISIBLE);
mPasue.setVisibility(View.VISIBLE);
seekBar.setVisibility(View.VISIBLE);
mBiaoti.setVisibility(View.VISIBLE);
mImageView.setVisibility(View.VISIBLE);
}
}
@Override
public void doubleClick() {
if (playStare) {
mediaPlayer.start();
playStare = false;
Log.i(TAG, "doubleClick: playStare==true");
} else {
mediaPlayer.pause();
playStare = true;
Log.i(TAG, "doubleClick: playStare==false");
}
}
class MyThread extends Thread {
@Override
public void run() {
super.run();
Intent intent = new Intent();
intent.setAction("alice.com.player");
while (flag) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (mediaPlayer != null) {
int currentPosition = mediaPlayer.getCurrentPosition();
intent.putExtra("progress", currentPosition);
sendBroadcast(intent);
}
}
}
}
class MyThread2 extends Thread{
@Override
public void run() {
super.run();
while (seekBar.getProgress()<=seekBar.getMax()){
int currentPosition = mediaPlayer.getCurrentPosition();
seekBar.setProgress(currentPosition);
}
}
}
class ProgressReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
int progress = intent.getIntExtra("progress", 0);
seekBar.setProgress(progress);
// Log.i(TAG, "onReceive: progress===最大值=="+progress);
}
}
}
网友评论