2017-10-14 1 views
0

J'ai étudié ce haut & bas, à la fois sur ici, et les intertubes en général. Malheureusement, je n'ai trouvé rien applicable, même sur l'API 'droid java pour la classe Button.Android java: la couleur du bouton bascule 'ligne' @ bas ne bascule pas correctement

Dans mon application, j'ai un bouton que j'utilise pour basculer la lecture d'un AudioTrack. Lorsque ce bouton est basculé manuellement, la barre horizontale au bas de (mais toujours dans les limites du bouton) change de couleur correctement. Ceci étant noir lorsque vous ne jouez pas, et rouge quand vous jouez, bien que je n'ai pas codé quoi que ce soit concernant cette fonction.

Malheureusement, lorsque le bouton est basculé via le code d'une méthode/fonction anonyme de l'écouteur AudioTrack, ce changement de couleur ne se produit pas. En conséquence, le changement de couleur de la barre du bouton alterne le comportement de changement de couleur avec chaque jeu autorisé à terminer. Code Listener suit:

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

Code Basculement suit:

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; 
} 

Je ne pense pas d'autres extraits de code sont applicables à cette question. Toutes mes excuses si je me trompe, n'hésitez pas à me faire savoir quelles autres informations seraient utiles pour ce problème.

Un grand merci à toutes les informations et/ou des pointeurs pour résoudre ce problème!

Répondre

0

Le problème ici s'est avéré être un «court-circuit entre le clavier et le sol», comme cela arrive si souvent avec des problèmes simples. J'avais effectivement inséré un ToggleButton dans le concepteur, affichant la barre colorisée au bas du contrôle, pour afficher le statut de l'activation ou non. Ce fait m'a échappé, comme je l'avais déclaré & casté comme un standard Button dans le code. AndroidStudio n'a pas signalé cela comme une erreur (je suis sûr que ToggleButton est une sous-classe de Button, provoquant cette autorisation).

La résolution de ce problème m'a permis d'utiliser la méthode setChecked() du ToggleButton de l'écouteur qui devait être activé lors de son retour. C'était le comportement que je cherchais.