- 浏览: 434982 次
- 性别:
- 来自: 苏州
文章分类
最新评论
-
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 2617Spinner 作为下拉选 ... -
ListView 内容之分批显示
2010-06-25 20:38 5947ListView 内容循环显示 大家试想 假如 ... -
MediaScanner 研究
2010-06-23 15:21 3190MediaScanner 之所以拿MediaSc ... -
CheckBox在ListView 而导致其OnItemClickListener不会被触发
2010-06-22 20:55 19047CheckBox在ListView 而导致其OnItemCli ... -
获取Launcher 启动列表
2010-06-22 10:09 3145获取Launcher 启动列表 即 列出所有Launc ... -
PreferenceActivity 全接触
2010-06-19 12:53 9451PreferenceActivity 为了引入 ... -
android src 下载 编译 安装 全接触
2010-06-12 14:44 0android src - download install ... -
Intent.createChooser() 妙用
2010-06-12 11:14 5961Intent.createChooser(ntent targ ... -
SMS管理:收信箱 发信息 编写新信息
2010-06-07 08:14 14474SMS管理 [功能] 1. 收信箱:显示 ... -
求 android 手机 帮忙测试sms服务系统 谢谢
2010-06-05 08:25 1459Hi guys, 最近一段时间没有更新blog 因为一 ... -
流媒体 播放 理论篇
2010-05-28 14:42 2251流媒体播放 之所以为理论篇 因为该篇仅实现了播放功能 ... -
NDK 搭建与HelloWorld
2010-05-19 09:48 3234NDK [前提] 1. Cygwin 用于安装 ... -
自定义字体
2010-05-15 10:49 1229自定义字体: []代码 步骤] 1 ... -
模糊查找 再深入
2010-05-15 09:41 3167模糊查找 再深入 应某位大哥要求 再次对 SQLite ... -
快捷方式Bar + ViewGroup - 自定义
2010-05-09 09:20 2488TabActivity - 自定义 其实 这篇感觉极鸡 ... -
View 拖动&插入 研究
2010-05-09 07:14 3990View 拖动&插入 即: ... -
带图标 快捷键 Menu - 终极版
2010-05-04 20:23 1849Menu 改头换面 扩展如下: 1. 图标化文字 2 ... -
*.gif 解码 - 实践
2010-05-02 18:58 1754*.gif decode 前面已经说过 今天不打算再说了 ... -
*.gif 解码 - 理论
2010-05-01 21:11 1527我们知道Android 默认是不支持*.gif 的 但是 ...
相关推荐
"ios-自定义进度条Swift实现.zip"这个压缩包提供了一个使用Swift编程语言实现自定义进度条的示例。在这个项目中,开发者创建了一个不同于系统默认UIProgressView的自定义组件,以满足更个性化的界面需求。 首先,...
"雷达扫描-流动进度条-波浪进度等自定义进度效果Android源码"是一个专为开发者设计的资源包,它提供了多种独特的进度展示方式,可以用于各种应用程序中的加载、刷新或者数据处理进度的展示。 首先,我们来详细探讨...
在音乐播放器应用中,进度条是一个至关重要的组件,它为用户提供直观的音频播放状态反馈。这个"简单实现音乐播放器进度条功能"的项目,旨在教你如何在编程环境中创建一个基本的音乐播放器,包括播放、暂停和切换歌曲...
一款音乐播放器,实现随机播放和顺序播放 自定义进度条控件 项目中用到的musicInfo.plist是从别的开源项目中拿过来的,原作者看到请谅解 github地址:https://github.com/Wty0507/WtyMusic
在开发一个简单的音乐播放器应用时,我们通常会关注几个核心功能:播放、暂停、随机播放以及音乐进度条的控制。这些功能对于提供良好的用户体验至关重要。在这个第一版本的音乐播放器项目中,开发者实现了这些基本...
"c#自定义进度条"是一个典型的自定义控件示例,它模仿了音乐播放器中的进度条,提供了独特的交互体验。在这个自定义控件中,IsPlay属性是一个布尔类型,用于控制进度条的行为,而Current属性则表示当前的进度位置。 ...
Android自定义View实现音频播放圆形进度条 本文详细介绍了Android自定义View实现音频播放圆形进度条,该进度条可以实时显示音频播放的进度。下面是实现该进度条的主要知识点: 一、自定义View的成员变量 在自定义...
这个压缩包"InteractivePlayerView自定义的音乐播放View.rar"提供了一个自定义的音乐播放视图(View)源码,名为InteractivePlayerView,它可能包含了一些核心的音乐播放功能和用户交互设计。以下是对这个自定义音乐...
在Android开发中,进度条(ProgressBar)是一种常见的UI组件,用于显示任务的进度或等待状态。Kotlin作为现代的编程语言,已经广泛应用于Android开发,它提供了简洁、易读的语法,使得实现进度条功能更加方便。本篇...
在Android平台上开发一款音乐播放器应用时,进度条是一个至关重要的元素,它通常包含两个功能:音量控制和播放进度调整。在这个专题中,我们将深入探讨如何实现这两个关键功能。 首先,音量控制是Android设备上任何...
在iOS开发中,创建一个仿网易云音乐的播放进度条是一项常见的任务,它涉及到UI设计、动画处理以及用户交互等多个方面。在这个项目中,我们主要关注三个方面:播放状态的显示、进度条的拖动功能以及视觉效果的实现。 ...
例如,当音乐状态改变(如播放、暂停)时,Service可以通过发送自定义广播通知UI更新状态。 7. **Progress Bar**: UI上的ProgressBar通常用于显示播放进度。可以使用SeekBar,它是可拖动的Progress Bar,通过设置...
本资源包聚焦于创建一个随时间增长而平滑变化的进度条,这在很多应用场景中都非常有用,如加载数据、播放音乐或者显示任务进度等。下面我们将详细探讨这个主题。 首先,进度条(LoadingProgress)在Android中通常是...
在这个“安卓进度条loadingprogress相关-MusicPlayerView音乐播放器进度控件.rar”压缩包中,包含了一个名为“MusicPlayerView”的自定义音乐播放器进度控件。这个控件可能是开发者为了实现更加个性化和交互友好的...
本话题主要探讨的是如何实现一个自定义的圆形进度条,并在其中间添加图像,以提升界面的美观度和交互性。 首先,我们需要理解圆形进度条的基本原理。圆形进度条通常是通过画布(Canvas)进行绘制的,利用Android的...
C#自定义音乐播放器进度条 在本篇文章中,我们主要介绍了C#自定义音乐播放器进度条的实现方法。进度条是我们在程序设计中常用的控件,但是VS提供的控件不一定满足我们的需求。这时,我们需要自定义控件来满足我们的...
在本文中,我们将深入探讨如何使用Vue2.0和SVG技术来实现一个音乐播放的圆形进度条组件。这个组件能够动态地展示音乐的播放进度,并且具有良好的视觉效果。首先,我们来看看组件的核心代码。 在`<template>`部分,...
【安卓综合音乐播放器带进度条】是一款专为Android用户设计的多功能音乐播放软件,集成了丰富的音频播放功能,提供了一种便捷的方式来享受音乐。它不仅具有基础的音乐播放功能,如播放、暂停、上一曲、下一曲,还...
在音乐播放应用中,这样的进度条可以用于显示歌曲的播放进度,并让用户能够通过拖动来快进或倒退。它可能还集成了其他功能,比如点击跳转到进度点,或者显示当前时间与总时间。 为了进一步了解和使用这个自定义的...
进度条作为一种重要的用户界面元素,不仅能够提升用户体验,还能够直观地反馈出播放器当前的操作状态,例如文件加载进度或播放进度等。 #### MFC进度条的实现原理 在VC++中,MFC(Microsoft Foundation Classes)...