循环按钮功能调用[kotlin]

时间:2019-12-22 15:38:12

标签: android button kotlin soundpool

我尝试编写我的第一个应用程序。

布局:

3个按钮可控制3个音频流,1个按钮可从文件加载音频流。

预期行为:

  • 按下加载按钮,然后按下其他三个(控制)按钮中的任何一个时,将出现一个文件选择对话框,并且所选的音频文件将被“分配”到相应的控制按钮。
  • 按下分配的控制按钮时,如果分配的声音长于20秒,则按钮颜色应通过新的xml分配更改,并且流应播放一次。当流已经在播放时,该流的播放模式将变为无限循环。再按一次将导致停止音频流。

方法: 控制按钮在xml文件中具有对“ ControlOnClick”功能的引用,该功能应在主要活动中调用。加载按钮引用了“ pickOnClick”,仅更改状态变量。

状态: 目前不考虑文件挑选,以保持较低的复杂性。为此有一个硬编码的占位符。

问题:如何遍历所有三个按钮,而无需为“ ControlOnClick”中的每个按钮复制/粘贴开关盒?

布局activity_main.xml代码段:

       <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="56dp"
        android:layout_marginBottom="52dp"
        android:onClick="ControlOnClick"
        android:text="Empty"
        app:layout_constraintBottom_toTopOf="@+id/nav_view"
        app:layout_constraintEnd_toEndOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="16dp"
        android:layout_marginBottom="456dp"
        android:onClick="pickOnClick"
        android:text="Load audio"
        app:layout_constraintBottom_toTopOf="@+id/button1"
        app:layout_constraintEnd_toEndOf="parent" />

和主要活动中的按钮/声音持续时间功能。kt:

    fun pickOnClick(v: View){
        // load button was pressed
        loadactive=true
    }

   fun ControlOnClick(v: View) {
        when (v.id) {
            // button1 was pressed
            R.id.button1 -> {
                if (loadactive == true) {
                    // load sound file if load button was pressed before, rename button1 and reset
                    sound1 = soundPool.load(this, meldeath1, 1)
                    // decide if it is a short or long clip
                    var resID = getResources().getIdentifier("meldeath1", "raw", getPackageName())
                    shortcliparray[1]=getSoundDuration(resID)
                    button1.text = "meldeath1"
                    if (shortcliparray[1]==false) {
                        button1.setBackgroundResource(R.drawable.btn_notplaying)
                    }
                    loadactive = false
                } else {
                    // play, loop or stop sound1
                    if (playbackstatus[1] == 0 && shortcliparray[1]==false) {
                        streamid[1] = soundPool.play(sound1, 1f, 1f, 0, 0, 1f)
                        button1.setBackgroundResource(R.drawable.btn_playing)
                        playbackstatus[1] = 1
                    } else if (playbackstatus[1] == 0 && shortcliparray[1]==true){
                        streamid[1] = soundPool.play(sound1, 1f, 1f, 0, 0, 1f)
                    } else if (playbackstatus[1] == 1 ) {
                        soundPool.stop(streamid[1])
                        streamid[1] = soundPool.play(sound1, 1f, 1f, 0, -1, 1f)
                        button1.setBackgroundResource(R.drawable.btn_looping)
                        playbackstatus[1] = 2
                    } else if (playbackstatus[1] == 2 ) {
                        soundPool.stop(streamid[1])
                        button1.setBackgroundResource(R.drawable.btn_notplaying)
                        playbackstatus[1] = 0
                    }
                }
            }

我检查了很多其他帖子,但根据阅读的内容我无法进一步了解。 :(

0 个答案:

没有答案