2017-10-14 70 views
0

我已经研究了这个高的&低,无论在这里,还是一般的音调。不幸的是,我发现什么都没有适用,即使在'Button类的droid java API上。Android java:按钮的颜色切换'行'@底部不能正确切换

在我的应用程序中,我有一个按钮用于切换AudioTrack的播放。当该按钮手动切换时,按钮底部(但仍在其范围内)的水平栏会正确切换颜色。这在播放时是黑色的,在播放时是红色的,尽管我没有编写任何有关此功能的代码。

不幸的是,当按钮被经由代码从AudioTrack收听者的匿名方法/函数内切换,不会发生此颜色变化。因此,按钮栏的颜色变化会随着每次播放完成而改变颜色变化行为。监听器的代码如下:

public void onMarkerReached(AudioTrack track) { 
    if (playing && !continuous) { 
    ouahful.stop(); 
    btnTogglePlayback.setText(
     getResources().getString(
     R.string.text_off)); 
    playing = !playing; 
    } 
} 

切换代码如下:

public void onTogglePlay(View view) throws MyException { 
    byte sounds[] = initSound(freq); 
    /* AudioTrack ouahful = new AudioTrack(AudioManager.STREAM_MUSIC, 
      sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, 
      sounds.length, AudioTrack.MODE_STATIC); */ 

    if (!playing) { 
     if (regen) { 
      sounds = initSound(freq); 
     } 
     ouahful = buildTrack(sounds); 
     ouahful.setNotificationMarkerPosition(numSamples); 

     setATListeners(); 
     btnTogglePlayback.setText(getResources().getString(R.string.text_on)); 
     ouahful.play(); 
    } else { 
     btnTogglePlayback.setText(getResources().getString(R.string.text_off)); 
     ouahful.stop(); //need to convert to save the track beyond this method 
    } 

    if ((freq != getResources().getInteger(R.integer.freq1)) && 
      (freq != getResources().getInteger(R.integer.freq2)) && 
      (freq != getResources().getInteger(R.integer.freq3))) { 
     rgrp.clearCheck(); 
    } 

    btnSetManually.setEnabled(false); 
    playing = !playing; 
} 

我不认为任何其他代码片段都适用于这个问题。我很抱歉,如果我错了,请随时让我知道其他信息将有助于这个问题。

非常感谢任何解决此问题的信息和/或指针!这里

回答

0

的问题竟然是一个“键盘和地板之间的短”,正如经常用简单的问题发生。实际上,我在设计器中插入了一个ToggleButton,在控件的底部显示彩色条,以显示它是否被激活的状态。这个事实让我难以理解,因为我宣称它在代码中将它作为标准的Button。 AndroidStudio没有将此标记为错误(我相信ToggleButtonButton的一个子类别,因此这是允许的)。

修复这个问题提供了我使用ToggleButtonsetChecked()方法从当它切换回会激活听众的能力。这是我一直在寻找的行为。