想到啥写啥第一期:致力于更简单易懂的代码解决我们安卓小白遇到的问题
今天就写音频播放和视频播放吧,是MediaPlayer,VideoView的知识点
1.用Mediaplayer播放音频,用seekBar去监听,然后就是手机播放器差不多的效果,难看是难看了点,然后什么播放暂停按钮可以自己添加哈!
上代码 .xml
<TextView
android:id="@+id/start"
android:layout_width="80sp"
android:text="00:00"
android:gravity="center"
android:textSize="20sp"
android:layout_height="50sp"/>
<SeekBar
android:id="@+id/seekBar"
android:layout_width="220sp"
android:layout_height="50sp"/>
<TextView
android:id="@+id/end"
android:text="00:00"
android:gravity="center"
android:textSize="20sp"
android:layout_width="80sp"
android:layout_height="50sp"/>
.java
public class Audio extends AppCompatActivity {
private TextView start,end;
private SeekBar seekBar;
private MediaPlayer player;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.audio);
start = findViewById(R.id.start);
end = findViewById(R.id.end);
seekBar = findViewById(R.id.seekBar);
player = MediaPlayer.create(this,R.raw.what);
获取总时间,然后转换格式,这个转换格式的代码还是感觉蛮好用的啊哈哈
int endTime = player.getDuration();
SimpleDateFormat format = new SimpleDateFormat("mm:ss");
//这里就是想转换成的格式编写
Date date = new Date(endTime);
String _endTime = format.format(date);
end.setText(_endTime);
seekBar.setMax(endTime);
player.start(); 嗯,如果想停止的话就用pause()方法
new MyThread().start();
刚学了一点点线程嘿嘿,用Thread开启一个子线程去监督这个进度条和音乐播放到哪里了
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
player.seekTo(seekBar.getProgress());
if (!player.isPlaying())player.start();
这里应该是在手指改变进度条之后产生的操作,
我一行用来同步进度条和播放进度,
一行用来在播放暂停之后再去改变进度条也能继续播放
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
用来释放内存啥的,不过这里老报错,也不知道咋整,不过都是退出应用才报错,就没去管它
if (player.isPlaying())player.pause();
if (player!=null){
player.release();
player = null;
}
}
class MyThread extends Thread{
@Override
public void run() {
super.run();
while (seekBar.getProgress()<=player.getDuration()){
seekBar.setProgress(player.getCurrentPosition());
//同上获取总时长的操作,获取当前进度,并且转换
int startTime = player.getCurrentPosition();
SimpleDateFormat format = new SimpleDateFormat("mm:ss");
Date date = new Date(startTime);
String _startTime = format.format(date);
start.setText(_startTime);
}
}
}
好啦,播放音频就结束了
2. 然后是播放视频,这个感觉会简单很多,我就把MediaPlayerController也加进去了
上代码 .xml
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
.java
public class Video extends AppCompatActivity {
private VideoView videoView;
private MediaController controller;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video);
实例化并且给出本地的视频地址
videoView = findViewById(R.id.videoView);
videoView.setVideoURI(Uri.parse("android.resource://"+getPackageName()+"/raw/video"));
controller实例化然后与mediaPlayer相互缠绵(就是我添加你,你添加我)
controller = new MediaController(this);
videoView.setMediaController(controller);
controller.setMediaPlayer(videoView);
videoView.start(); //暂停好像也是pause()
监听是否放完了,放完了就再来一遍,按照个人需求写就行了
它还有一些监听,什么预处理啊,报错监听啊,点击监听啊,就不多说了,很烦,遇到了再说吧......懒...
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
videoView.start();
}
});
}
@Override
protected void onDestroy() {
和音频一样都要释放,不过释放内存的方法不一样
super.onDestroy();
if (videoView!=null){
videoView.suspend();
videoView = null;
}
}
}
真·短小,嗯,就说到这里 ,么么哒(づ ̄ 3 ̄)づ
日常祝各位看官老爷早生贵子,福如东海啊哈哈哈(日常瞎用成语)
来源:CSDN
作者:weixin_43272727
链接:https://blog.csdn.net/weixin_43272727/article/details/104049527