媒体播放器、进度条 您所在的位置:网站首页 android各种进度条 媒体播放器、进度条

媒体播放器、进度条

2023-04-08 11:57| 来源: 网络整理| 查看: 265

媒体播放器、进度条 日期:2023-02-25     浏览:224     【中文标题】媒体播放器、进度条【英文标题】:MediaPlayer, ProgressBar 【发布时间】:2012-04-03 19:56:37 【问题描述】:

这是在播放媒体时更新 ProgressBar 的正确方法吗?我想在 MediaPlayer 中会有一个回调,但我找不到它。

mediaPlayer.start(); final SeekBar progress = (SeekBar) dialog.findViewById(R.id.seekBar1); progress.setMax(mediaPlayer.getDuration()); new CountDownTimer(mediaPlayer.getDuration(), 250) public void onTick(long millisUntilFinished) progress.setProgress(progress.getProgress() + 250); public void onFinish() .start();

最好的问候。

【问题讨论】:

【参考方案1】:

就个人而言,我开始一个线程,每 200 毫秒左右检查一次 getCurrentPosition(),直到 onCompletion() 事件被触发:

private class MediaObserver implements Runnable private AtomicBoolean stop = new AtomicBoolean(false); public void stop() stop.set(true); @Override public void run() while (!stop.get()) progress.setProgress(mediaPlayer.getCurrentPosition()); Thread.sleep(200); private MediaObserver observer = null; public void runMedia() mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener @Override public void onCompletion(MediaPlayer mPlayer) observer.stop(); progress.setProgress(mPlayer.getCurrentPosition()); ); observer = new MediaObserver(); mediaPlayer.start(); new Thread(observer).start();

【讨论】:

计时器不会阻塞用户界面,所以我想它在另一个线程中。所以我想是一样的。我希望我足够聪明,能够弄清楚这些事情。 @pouzzler 倒计时计时器在另一个线程中运行,唯一的区别是它不使用实际进度。我会写一个线程示例 啊不用了,我明白了。谢谢:) 和以前一样的问题,我用了你的建议...... CountDownTimer:progress.setProgress(mediaPlayer.getCurrentPosition()); - 仍然不知道哪个是最好的 ;) 为我和我的哲学问题上床睡觉。 抱歉,我标记了另一个答案,因为它对每个人都更有用,尽管我现在会继续使用我的非 ICS 内容。【参考方案2】:

看看android.widget.MediaController,它有一个进度条。

如果合适,他们会使用递归调用自身的处理程序。您可以将延迟设置为您希望更新进度条的频率。

请注意,控制器可以显示或隐藏,也可以由用户拖动,当然,视频也可以停止。这些是在另一个递归调用更新栏之前进行各种检查 (!mDragging ;; mShowing ;; mVideoView.isPlaying()) 的原因。

protected Handler mHandler = new Handler() @Override public void handleMessage(Message msg) int pos; switch (msg.what) // ... case SHOW_PROGRESS: pos = setProgress(); if (!mDragging && mShowing && mVideoView.isPlaying()) msg = obtainMessage(SHOW_PROGRESS); sendMessageDelayed(msg, 1000 - (pos % 1000)); break; // ... ;

要开始使用:

mHandler.sendEmptyMessage(SHOW_PROGRESS);

它会自行停止,但您应该使用以下命令取消最后一个待处理的请求:

mHandler.removeMessages(SHOW_PROGRESS);

【讨论】:

谢谢,正是我要找的东西。 @pouzzler - 不客气!查看 MediaController 类非常适合为您提供有关制作自定义控制器的想法。 第二个链接因 DMCA 删除而消失:github.com/OESF/OHA-Android-4.0.1_r1.0【参考方案3】:

最有效的方法是使用JRaymond的回答和EventBus

private class MediaObserver implements Runnable private AtomicBoolean stop = new AtomicBoolean(false); public void stop() stop.set(true); @Override public void run() while (!stop.get()) try if (player.isPlaying()) sendMsgToUI(player.getCurrentPosition(), player.getDuration()); catch (Exception e)e.printStackTrace(); try Thread.sleep(100); catch (InterruptedException e) e.printStackTrace(); private MediaObserver observer = null; public void runMedia() observer = new MediaObserver(); new Thread(observer).start(); //handles all the background threads things for you private void sendMsgToUI(int position) ChangingEvent event = new ChangingEvent(position); EventBus.getDefault().post(event);

ChangingEvent 类看起来像这样:

public class ChangingEvent private int position; public ChangingEvent(int position) this.position= position; public int getPosition() return position;

在你的 Activity 或 Fragment 中你所要做的就是

class YouClass extends Activity private EventBus eventBus = EventBus.getDefault(); @Override protected void onCreate(Bundle savedInstanceState) //your code eventBus.register(this); //eventbus that updates UI public void onEventMainThread(ChangingEvent event) //seekbar or any other ui element seekBar.setProgress(event.getPosition());

【讨论】:

我喜欢这种方法,但我认为您忘记添加循环/while,这会使 run() 被多次执行 哦,是的,感谢您注意到这一点 - 我现在会更正它。

相关文章>

pythongui编程:音乐播放器(多线程爬虫进度条文件)(代码片段)

{...GUI布局4.功能介绍5.代码实现1.程序运行结果Python实现音乐播放器(爬虫、多线程、进度条、文件)2.程序实现原理本音乐播放器GUI方面运用Python的tkinter实现,播放的音乐来自网络爬虫和本电脑已经有的。为了使整个程序运行起...}

qt学习笔记——①进度条可拖动点击②有暂停按钮的视频播放器(代码片段)

{一、配置文件更改用到多媒体的话,需要修改配置文件的第一行,后面加一句sqlmultimediamultimediawidgets修改后的配置文件前3行如下QT+=coreguisqlmultimediamultimediawidgets//下面都不用改greaterThan(QT_MAJOR_VERSION,4):QT+=widgetsC}

android开发---mediaplayer简单音乐播放器

{Android开发—MediaPlayer简单音乐播放器功能介绍实现一个简单的播放器,类似网易云音乐形式,功能包括:播放、暂停,停止,退出功能;后台播放功能;进度条显示播放进度、拖动进度条改变进度功能&...}

微信小程序音乐播放器(代码片段)

{场景使用微信小程序实现一个简易的音乐播放器:Github地址效果虽然界面很简单,但是一个音频播放器该有的功能大部分都有了(没有歌词显示功能)。主要实现的功能有:实现音频播放,暂停;实现拖拽...}

Chewie颤动视频播放器

{】Chewie颤动视频播放器【英文标题】:ChewiefluttervideoPlayer【发布时间】:2020-12-0808:25:42【问题描述】:我正在使用带有自定义控制栏的咀嚼播放器,当播放器切换到全屏时,我看不到控件..即使播放器进入全屏,我也需要显示控...}

swift版qq音乐播放器(代码片段)

{一完善部分的QQ音乐效果图二需要完善点1歌曲的切换和暂停播放2歌曲当前播放时间和歌曲总时间的更新3进度条的处理4歌手头像处理5头像动画效果6歌词的进度显示8完善细节三添加歌曲展示页面中的动画效果1代码书写位置:由于...}

Android媒体播放器没有完全寻求进展

{】Android媒体播放器没有完全寻求进展【英文标题】:Androidmediaplayernotprogressseekingcompletely【发布时间】:2013-04-2506:08:34【问题描述】:我正在尝试使用媒体播放器播放.wav文件。实际上,到目前为止,我已经完成了如下所示。它正...}

jquery 音频播放器 - 下一个功能问题

{】jquery音频播放器-下一个功能问题【英文标题】:jqueryaudioplayer-nextfunctionproblems【发布时间】:2016-02-1422:04:09【问题描述】:我需要帮助。每当按下下一个按钮时,播放器将正常播放并显示下一首曲目,但是,进度条和持续时间...}

带有交互的音频进度条 html5

{...2:44:17【问题描述】:嘿,我需要在html5中创建一个简单的播放器,我创建了decontrol、play、pause,但我需要一个带交互的进度条这个例子是一个interarion酒吧,但我需要点击并进入音乐时间http://jsfiddle.net/LQqGS/3/$(\'.cl}

android音视频深入十九使用ijkplayer做个视频播放器(附源码下载)(代码片段)

{...s://github.com/979451341/Myijkplayer前段时候我觉得FFmpeg做个视频播放器好难,虽然播放上没问题,但暂停还有通过拖动进度条来设置播放进度,这些都即便做得到,可以那个延缓。。。。。现在学习一下目前移动端最知名的视频播放器...}



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有