我有一个按钮,我想用这个按钮控制多个MediaPlayer对象。在示例中,用户从列表中选择了3个声音,当他们正在播放时,用户点击暂停图标按钮,所有声音都应该暂停(并且暂停按钮的资源应该更改为播放图标)。如果用户再次点击播放图标,所有的声音应该继续。
如果我删除代码中的其他部分,我可以实现暂停声音,这是当前正在播放,但如果我再次单击播放按钮,声音将不会播放,什么也不会发生。
我得XML:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageButton
android:id="@+id/stop_all_sound"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:src="@drawable/pause_button" />
</LinearLayout>
我的代码:
stop_all_sound.setOnClickListener {
// List of sounds
val list = arrayListOf(sound1, sound2, sound3, sound4)
// List for playing sounds
val playingSounds = arrayListOf<MediaPlayer>()
list.forEach { sound ->
if (sound.isPlaying) {
// If sound is playing add it to the playingSounds list
playingSounds.add(sound)
for (playingSound in playingSounds) {
// Pause that playing sounds currently
playingSound.pause()
stop_all_sound.setImageResource(R.drawable.play_button)
}
}
// I couldn't figured out this part. I guess playingSounds list is empty
else {
for (playingSound in playingSounds) {
playingSound.start()
stop_all_sound.setImageResource(R.drawable.pause_button)
}
}
}
}
为了更清楚地说明,假设有一个MediaPlayer
列表和一个按钮
MediaPlayer
处于播放状态,则按钮
的图标将为play_button,否则为pause_button当按下按钮
时,我希望MediaPlayer
的以下行为:
var buttonIcon: Int = R.drawable.play_button
val playList = PlayList { isPlaying ->
buttonIcon =
if (isPlaying) R.drawable.pause_button
else R.drawable.play_button
stop_all_sound.setImageResource(buttonIcon)
}
stop_all_sound.setOnClickListener {
// List of sounds
val list = arrayListOf(sound1, sound2, sound3, sound4)
if (playList.isEmpty()) {
buttonIcon = R.drawable.play_button
list.forEach { sound ->
if (sound.isPlaying) {
playList.add(sound)
buttonIcon = R.drawable.pause_button
}
}
if (playList.isEmpty()) list.forEach { playList.add(it) }
}
when (buttonIcon) {
R.drawable.play_button -> playList.play()
R.drawable.pause_button -> playList.pause()
}
}
// PlayList class
class PlayList(private val playingState: (Boolean) -> Unit) {
private val soundList = mutableListOf<MediaPlayer>()
fun isEmpty() = soundList.isEmpty()
fun add(sound: MediaPlayer) {
sound.setOnCompletionListener {
soundList.remove(it)
if (soundList.isEmpty()) playingState(false)
}
soundList.add(sound)
}
fun play() {
soundList.forEach {
it.start()
}
playingState(true)
}
fun pause() {
soundList.forEach {
if (it.isPlaying) it.pause()
}
playingState(false)
}
}
我可以从你的问题中找出以下测试用例,
在上述情况下,我可能会做以下操作:
var buttonIcon = R.drawable.play_button
val playList = PlayList(arrayListOf(sound1, sound2, sound3, sound4)) { isPlaying ->
if (isPlaying) {
buttonIcon = R.drawable.pause_button
stop_all_sound.setImageResource(buttonIcon)
} else {
buttonIcon = R.drawable.play_button
stop_all_sound.setImageResource(buttonIcon)
}
}
stop_all_sound.setOnClickListener {
when(buttonIcon) {
R.drawable.play_button -> playList.play()
R.drawable.pause_button -> playList.pause()
}
}
playlist
类
class PlayList(
private val soundList: List<MediaPlayer>,
private val playingState: (Boolean) -> Unit
) {
private var nowPlayingCount = 0
init {
soundList.forEach {
it.setOnCompletionListener {
nowPlayingCount = nowPlayingCount.dec()
if (nowPlayingCount == 0) playingState(false)
}
}
}
fun play() {
soundList.forEach {
it.start()
}
playingState(true)
nowPlayingCount = soundList.size
}
fun pause() {
soundList.forEach {
if (it.isPlaying) it.pause()
}
playingState(false)
nowPlayingCount = 0
}
}
我有播放收音机的服务
本文向大家介绍Android仿音乐播放器带进度的播放暂停按钮,包括了Android仿音乐播放器带进度的播放暂停按钮的使用技巧和注意事项,需要的朋友参考一下 因为项目需要,要做一个下载暂停开始的按钮,要求按钮上显示进度。网上找了找没有合适的,不太满意,于是自己动手写了一个。 效果如下: 主要步骤: 1、最外侧的圆环。 2、圆环内侧代表进度的圆弧。 3、暂停时在中心部位画出三角形。 4、播放时在中心部
我正在使用MediaController.MediaPlayerControl以便在自定义视图的底部显示MediaController,但无法使其正常工作。当我第一次播放音乐时,应该有暂停按钮可见,但相反,有播放,当我按下那个按钮时,音乐被正确暂停,状态保持不变,之后它正常工作。此外,当我播放下一首歌曲时,旧的MediaController小部件与新的小部件重叠。有时,当音乐播放时,进度/搜索栏不
我已经建立了我的音乐列表(RecyclerView)中的每一项都有两个按钮,第一个播放音乐,第二个暂停停止,但当我点击播放两个音频时,两个启动,而我希望第一个停止。这是我的适配器(标志是在播放音频时将图像视图从播放更改为暂停) 非常感谢。
我创建的Android应用程序包含2个按钮,点击每个按钮播放mp3文件。问题是,当我播放按钮1时,它播放声音1,当我单击按钮2时,它播放声音2。 我检查其他玩家的每个按钮是否正常工作,然后停止并播放单击的按钮 但是,如果我两次单击同一个按钮,则会将第一个音频保持在后台播放,然后再次播放另一个音频 我试图检查并停止它,但它不起作用! 我想,如果我点击按钮1,它将播放声音,如果再次点击它,它将停止播放