- 浏览: 427179 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
yehuiyan8002:
支持中文查询
快熟查找联系人 -
lehehe:
现成的接口,免费试用,http://www.haoservic ...
天气Widget -
D.Z:
android:focusable="false&q ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
freecode:
碰到该问题,CheckBox的android:focusabl ...
CheckBox在ListView 而导致其OnItemClickListener不会被触发 -
echohfut:
哥们,新博客是不是在墙外啊?不能访问。还有你怎么进行博客迁移的 ...
博客 迁移
音乐播放之进度条
[前提]
* android 自身也提供了该接口 似乎是:MediaController 但看过截图 发现极丑 所以今天就自己写了一个 现于诸位分享分享
[要求]
1. 进度条控件打算使用系统提供的SeekBar
2. SeekBar 要支持拖拉功能 即:定点播放
3. SeekBar 要反映播放位置 即:播放到哪 SeekBar 就在哪
[原理]
1. 音乐定点播放:MediaPlayer.seekTo(int msecond) //单位:毫秒
2. 音乐文件播放时间:MediaPlayer.getDuration()
3. SeekBar 获取位置:SeekBar.getProgress()
4. SeekBar 最大值: SeekBar.getMax()
[代码 步骤]
1. 定义界面:main.xml
1 * Button : 播放控制 如:暂停 继续 1 * TextView : 显示播放百分比 1 * SeekBar : 进度条 1 * RadioGroup : 显示所有sdcard 音乐文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" > <Button android:id="@+id/cmd" android:text="Loading..." android:layout_width="90dip" android:layout_height="wrap_content" android:singleLine="true" /> <TextView android:id="@+id/progress" android:text="Progress.." android:layout_width="50dip" android:layout_height="fill_parent" android:gravity="center" android:singleLine="true" /> </LinearLayout> <SeekBar android:id="@+id/seekb" android:max="100" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
2. View 初始化
public void initialize(){ sBar = (SeekBar)findViewById(R.id.seekb); rGroup = (RadioGroup)findViewById(R.id.radio); cmdButton = (Button)findViewById(R.id.cmd); mPlayer = new MediaPlayer(); }
3. 拖动SeekBar 且播放指定位置的音乐
sBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub int dest = seekBar.getProgress(); int mMax = mPlayer.getDuration(); int sMax = sBar.getMax(); mPlayer.seekTo(mMax*dest/sMax); } });
4. 刷新播放位置 且使其实时变化
//因为MediaPlayer没有播放进度的回调函数 所以只能:开辟一个Thread 定时通知其刷新
public void startProgressUpdate(){ //开辟Thread 用于定期刷新SeekBar DelayThread dThread = new DelayThread(100); dThread.start(); }
而该Thread 具体实现为:
private Handler mHandle = new Handler(){ @Override public void handleMessage(Message msg){ int position = mPlayer.getCurrentPosition(); int mMax = mPlayer.getDuration(); int sMax = sBar.getMax(); sBar.setProgress(position*sMax/mMax); } }; public class DelayThread extends Thread { int milliseconds; public DelayThread(int i){ milliseconds = i; } public void run() { while(true){ try { sleep(milliseconds); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } mHandle.sendEmptyMessage(0); } } }
5. emulator 运行截图:
评论
6 楼
ableouou
2010-09-06
建议不要用音乐的总时间,因为有些比较大会超过100000,建议用个比例来进行拖动,但这样要考虑到拖放播放的声音可能有一点回播现象
5 楼
zhouxiaoli521
2010-09-06
定点播放可以用一种更简单的方式
把音乐的总时间设置成进度条的最大值
musicProgressBar.setMax(mp.getDuration());
这样你在进度条上拖动的位置直接就可以定位到毫秒了
public void onStopTrackingTouch(SeekBar seekBar) {
mp.seekTo(musicProgressBar.getProgress());
}
更新进度条也一样 直接把当前播放的时间定位到进度条就可以了
musicProgressBar.setProgress(mp.getCurrentPosition());
把音乐的总时间设置成进度条的最大值
musicProgressBar.setMax(mp.getDuration());
这样你在进度条上拖动的位置直接就可以定位到毫秒了
public void onStopTrackingTouch(SeekBar seekBar) {
mp.seekTo(musicProgressBar.getProgress());
}
更新进度条也一样 直接把当前播放的时间定位到进度条就可以了
musicProgressBar.setProgress(mp.getCurrentPosition());
4 楼
lee306675730
2010-04-22
學習了,最近正剛開始學習android,
看到你們好牛。。奮鬥啊!
看到你們好牛。。奮鬥啊!
3 楼
ucgfan
2010-04-12
恩,果然是没有启用的问题~
无限感谢~~自己做的player又完善了一点~~
无限感谢~~自己做的player又完善了一点~~
2 楼
gryphone
2010-04-12
ucgfan 写道
马上添加进我之前写的player里进行尝试
但是发现拖动实现定点播放都没有问题
就是没有实时更新SEEKBAR
不知道是我添加错哪里了~
但是发现拖动实现定点播放都没有问题
就是没有实时更新SEEKBAR
不知道是我添加错哪里了~
可能是因为你没有启动DelayThread所致吧 你在Activity::onCreate() 最后加上如下代码:
startProgressUpdate()
1 楼
ucgfan
2010-04-11
马上添加进我之前写的player里进行尝试
但是发现拖动实现定点播放都没有问题
就是没有实时更新SEEKBAR
不知道是我添加错哪里了~
但是发现拖动实现定点播放都没有问题
就是没有实时更新SEEKBAR
不知道是我添加错哪里了~
发表评论
-
滑动抽屉 另一种解决办法
2010-07-09 17:43 0滑动抽屉 -
Spinner 定制化 增强版
2010-07-09 14:34 2571Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5862ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3105MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 18882CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3098获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9390PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5917Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14364SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1412Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2124流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3154NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1165自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3100模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2385TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3931View 拖动&插入 即: ... -
带图标 快捷键 Menu - 终极版
2010-05-04 20:23 1785Menu 改头换面 扩展如下: 1. 图标化文字 2 ... -
*.gif 解码 - 实践
2010-05-02 18:58 1653*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1486我们知道Android 默认是不支持*.gif 的 但是 ...
相关推荐
自定义进度条Swift实现
一款音乐播放器,实现随机播放和顺序播放 自定义进度条控件 项目中用到的musicInfo.plist是从别的开源项目中拿过来的,原作者看到请谅解 github地址:https://github.com/Wty0507/WtyMusic
音乐播放器--简单实现播放、暂停、随机播放、音乐进度条。有侧滑菜单的实现,自定义Dialog的实现
主要为大家详细介绍了Android自定义View实现音频播放圆形进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
kotlin实现的进度条
c#自定义的进度条和音乐播放器的进度条一样炫,绝对值5分,控件的属性中有个布尔类型的IsPlay,如果为true的话,进度点就会闪烁,有当前点Current,自己看吧
需求:显示音乐播放按钮、可手动拖拽进度条;页面中含多个音乐,播放当前音乐时暂停其他音乐播放。 小程序自带标签 audio 小程序自带的audio标签含固定的样式,且有最小尺寸。目前项目也不含name和author字段,所以...
基于vue2.0实现音乐/视频播放进度条组件的方法及代码解释,具体内容如下 需求分析: ①:进度条随着歌曲的播放延长,歌曲播放完时长度等于黑色总进度条长度;时间实时更新。 ②:当滑动按钮时,实时更新播放时间,...
自定义界面,横竖屏切换,进度条拖动快进,
源码MusicPlayerView,MusicPlayerView是音乐播放进度自定义视图和进度条,音乐播放进度效果的自定义view。功能比较完善。 使用说明: 你可以在xml文件中定义属性值,也可以在代码中。我们有5个可以自定义player ...
主要为大家详细介绍了C#自定义音乐播放器进度条效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
自定义进度条
前段时间看到了豆瓣FM的音乐播放界面,有一个环形的进度条,非常的好看,于是想了想,为什么不自己做一个呢,于是就开始了自定义的过程 豆瓣FM的播放界面如下图: 功能分析 虽然功能比较简单,但是仍然需要仔细...
Qt网易云音乐中的音乐进度条是一个小小的难关,今天在Android写记录步数进度条中突然想到了它。移动端和电脑端自定义写界面模块的方式大同小异,现在将其中的代码放出,供大家点评参阅。代码还是比较混乱,请各位...
4、增加自定义键盘按键设置!电脑键盘图片资源已准备好。(工作量似乎不小!) ------------------------------------------------------------------------- 2.0.3 2013-11-04~05 -----------------------------...
4、修正拖动进度条时当前播放时间显示不正确的问题。(2013-10-22) 5、增加命令行参数的处理,为了同时启动多个进程弹奏左右手都有的谱子? 弹奏还是不同步!!!(2013-10-22) 命令行参数: -debug (调试...
主要介绍了ios实现音频进度条效果,本文写了一个小demo通过实例代码相结合的形式给大家详细介绍,需要的朋友可以参考下