您的位置:首页 > 科技 > 能源 > 房地产开发公司资质等级_百度站长平台快速收录怎么弄_百度招聘网最新招聘信息_百度股市行情上证指数

房地产开发公司资质等级_百度站长平台快速收录怎么弄_百度招聘网最新招聘信息_百度股市行情上证指数

2024/12/23 4:30:14 来源:https://blog.csdn.net/u010074743/article/details/144019904  浏览:    关键词:房地产开发公司资质等级_百度站长平台快速收录怎么弄_百度招聘网最新招聘信息_百度股市行情上证指数
房地产开发公司资质等级_百度站长平台快速收录怎么弄_百度招聘网最新招聘信息_百度股市行情上证指数
Android开发简单mp4播放器

简单的mp4播放器,适用于大作业。商业用还是不太行的。商业用一般接的是第三方播放器的。

一、思路:

用MediaPlayer和SurfaceView结合

二、效果图:

在这里插入图片描述
看视频直观点:

Android开发教程案例源码分享-简单mp4播放器

三、关键代码:
public class Mp4MainActivity extends AppCompatActivity {private SurfaceView surface_view;private SeekBar musicProgress;private TextView currentTime, totalTime;private ImageView prevBtn, playPauseBtn, nextBtn;private MediaPlayer player;private int currentPlaying = 0; //用作ArrayList下表,当前播放的歌曲、private ArrayList<Integer> playList = new ArrayList<>();private SurfaceHolder surface_holder;private boolean isPausing, isPlaying;  //音乐暂停状态,音乐第一次播放之后变为true@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();preparePlayList();TimerTask timerTask = new TimerTask() {@Overridepublic void run() {if (isPlaying) {updateTimer();}}};new Timer().scheduleAtFixedRate(timerTask, 0, 500);}private void init() {surface_view = findViewById(R.id.surface_view);musicProgress = findViewById(R.id.sb_progress);currentTime = findViewById(R.id.tv_progress_current);totalTime = findViewById(R.id.tv_progress_total);prevBtn = findViewById(R.id.btn_prev);playPauseBtn = findViewById(R.id.btn_play_pause);nextBtn = findViewById(R.id.btn_next);View.OnClickListener onClick = new OnClickControl();prevBtn.setOnClickListener(onClick);playPauseBtn.setOnClickListener(onClick);nextBtn.setOnClickListener(onClick);OnSeekBarChangeControl onSbChange = new OnSeekBarChangeControl();musicProgress.setOnSeekBarChangeListener(onSbChange);}private void preparePlayList() {Field[] field = R.raw.class.getFields();for (int count = 0; count < field.length; count++) {Log.i("Raw Asset", field[count].getName());try {int resId = field[count].getInt(field[count]);playList.add(resId);} catch (IllegalAccessException e) {e.printStackTrace();}}}private void prepareMedia() {try {if (isPlaying) {player.stop();player.reset();}player = MediaPlayer.create(getApplicationContext(), playList.get(currentPlaying));player.setAudioStreamType(AudioManager.STREAM_MUSIC);if (surface_holder == null){surface_holder = surface_view.getHolder();surface_holder.setFixedSize(1080, 1920);}player.setDisplay(surface_holder);   /* 设置播放载体 */int musicDuration = player.getDuration();musicProgress.setMax(musicDuration);int sec = musicDuration / 1000;int min = sec / 60;sec -= min * 60;String musicTime = String.format("%02d:%02d", min, sec);totalTime.setText(musicTime);player.start();}catch (Exception e){e.printStackTrace();}}private void updateTimer() {runOnUiThread(() -> {int currentMs = player.getCurrentPosition();int sec = currentMs / 1000;int min = sec / 60;sec -= min * 60;String time = String.format("%02d:%02d", min, sec);musicProgress.setProgress(currentMs);currentTime.setText(time);});}private class OnClickControl implements View.OnClickListener {@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_prev://重播playPauseBtn.setImageResource(R.mipmap.ic_pause);  //切换成暂停键if (player != null && !player.isPlaying()) {currentPlaying = --currentPlaying % playList.size();}prepareMedia();isPausing = false;isPlaying = true;break;case R.id.btn_play_pause://开始暂停if (!isPausing && !isPlaying) { //暂停状态,且从未被播放//开始播放playPauseBtn.setImageResource(R.mipmap.ic_pause);  //切换成暂停键prepareMedia();isPlaying = true;} else if (!isPausing && isPlaying) { //暂停状态,且被播放过一次//继续播放playPauseBtn.setImageResource(R.mipmap.ic_pause);//切换成暂停键player.start();} else { //播放状态
四、项目demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码demo的私信我

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com