Ritardare una azione come la comparsa di un pulsante

di Anonimizzato28445 il
3 risposte
Buongiorno,
sono alla ricerca di un metodo che, dopo aver premuto un pulsante, ritardi la sequenza delle azioni per la comparsa di un pulsante e la modifica di un testo.
Il problema, fondamentalmente, è che ho un audio che dura 3 secondi e vorrei che solo al termine dell'esecuzione dell'audio, compaia appunto un pulsante ed una scritta.
Come posso fare?
Per essere più chiari vi posto il codice
Btn_Via.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            
            Suono.start();
           		//Attendere che finisca la riproduzione del suono che dura 3 secondi
           		
           		
            		//Azioni da svolgere dopo l'attesa
            Btn_TornaHome.setVisibility(View.VISIBLE);
            Txt_Testo.setText("Ritardo eseguito");}
                        //Azioni da svolgere dopo l'attesa
  });
Onde farvi perdere tempo, vi posto anche il codice di un'altro esempio che avevo provato con Thread.sleep ma che comunque non funziona, l'unico risultato che ho avuto è che ritarda le azioni dopo aver premuto il pulsante ma le esegue comunque contemporaneamente
        BTVia.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            
            	//Prima azione
                PrimoTXT.setText("Azione partita");

		//attendere N secondi prima di eseguire le altre due azioni	
                try {
                    Thread.sleep(2500);
                    SecondoTXT.setText("Azione dopo theread.sleep");
                    Secondo.setVisibility(View.VISIBLE);


                } catch (InterruptedException e) {
                    e.printStackTrace();}
            }
        });

Grazie mille per la vostra collaborazione

3 Risposte

  • Https://developer.android.com/reference/android/os/Handler
    
    new Handler().postDelayed(new Runnable() {
    
        @Override
        public void run() {
            // Hide your View after 3 seconds
            Btn_TornaHome.setVisibility(View.VISIBLE);
            Txt_Testo.setText("Ritardo eseguito");
        }
    }, 2500);
    
    
  • Per fare quello che ti serve io utilizzerei :
    definisci il pulsante alla chiamata del fragment/activity come private
    nella grafica ( xml ) lascia il pulsante con visibility GONE
    quando ti servirà di farlo apparire usa VISIBLE, HalJordan te lo ha già mostrato ...

    new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
    // Hide your View after 3 seconds
    Btn_TornaHome.setVisibility(View.VISIBLE);
    Txt_Testo.setText("Ritardo eseguito");
    }
    }, 2500);

    l'ultimo valore 2500 sono 2,5 secondi e non 3 ... il valore è espresso in millisecondi ...


    il codice .. è un pò antiquato ... puoi utilizzare la semplificazione ( Lambda )
    Btn_Via.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    Suono.start();
    //Attendere che finisca la riproduzione del suono che dura 3 secondi


    //Azioni da svolgere dopo l'attesa
    Btn_TornaHome.setVisibility(View.VISIBLE);
    Txt_Testo.setText("Ritardo eseguito");}
    //Azioni da svolgere dopo l'attesa
    });

    Diventa :

    Btn_Via.setOnClickListener( -> view {
    Suono.start();
    //Attendere che finisca la riproduzione del suono che dura 3 secondi
    //Azioni da svolgere dopo l'attesa
    Btn_TornaHome.setVisibility(View.VISIBLE);
    Txt_Testo.setText("Ritardo eseguito");
    //Azioni da svolgere dopo l'attesa
    });

    Divertiti.
  • Perfetto, grazie mille
Devi accedere o registrarti per scrivere nel forum
3 risposte