Autore Topic: Modifica della width di una TextView all'interno di un membro Runnable  (Letto 757 volte)

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Salve a tutti,
non riesco a modificare la Width di una TextView (ho lo stesso problema con un ImageView) all'interno di un membro Runnable di un Activity.

Questo è il codice che non funziona:
Codice: [Seleziona]
protected Runnable mCountDown = new Runnable() {
            public void run() {
                    maxTimerPoints -= lessPoints;

                    ImageView v = (ImageView) findViewById(R.id.imgCurrentTimer);
                    v.getLayoutParams().width = maxTimerPoints;

                    if (maxTimerPoints < 1) {
                            maxTimerPoints = 1;
                    } else {
                            mHandler.postDelayed(this, interval);
                    }
            }
        };
Ma ovviamente non funziona.

Qualche idea?

Grazie

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Modifica della width di una TextView all'interno di un membro Runnable
« Risposta #1 il: 08 Dicembre 2013, 12:55:53 CET »
0
Non so che genere di multi-thread tu stia facendo, però in generale tutto ciò che modifica la UI deve essere eseguito main-thread, quello dell'activity, mentre tutto ciò che comporta operazioni onerose e/o lunghe, deve essere destinato a thread secondari. Se il runnable viene eseguito nel thread di UI, allora tutto dovrebbe andare senza problemi. Se invece viene eseguito in un thread parallelo, gli verrà impedito di fare modifiche alla UI (perchè non è il main-thread).
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:Modifica della width di una TextView all'interno di un membro Runnable
« Risposta #2 il: 08 Dicembre 2013, 14:35:16 CET »
0
Non so che genere di multi-thread tu stia facendo, però in generale tutto ciò che modifica la UI deve essere eseguito main-thread, quello dell'activity, mentre tutto ciò che comporta operazioni onerose e/o lunghe, deve essere destinato a thread secondari. Se il runnable viene eseguito nel thread di UI, allora tutto dovrebbe andare senza problemi. Se invece viene eseguito in un thread parallelo, gli verrà impedito di fare modifiche alla UI (perchè non è il main-thread).
Il thread è il main. Lancio quest'istruzione:
Codice: [Seleziona]
mHandler.postDelayed(mCountDown, startTimer);
Nell'oncreate dell'Activity.

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Modifica della width di una TextView all'interno di un membro Runnable
« Risposta #3 il: 09 Dicembre 2013, 00:15:44 CET »
0
Se stai tentando di creare una animazione...usa le View Animation !

Usare public final boolean postDelayed (Runnable r, long delayMillis) della classe Handler potrebbe portare ad un comportamento non sempre sperato (dipende anche da come lo si usa), come spiegato nel reference, poichè tale metodo ritorna un valore booleano di conferma dell'avvenuto "accodamento" della richiesta, ma anche una risposta positiva potrebbe non essere processata se il tempo di attesa supera il tempo di esecuzione del looper...

Citazione da: Android Reference
Returns true if the Runnable was successfully placed in to the message queue. Returns false on failure, usually because the looper processing the message queue is exiting. Note that a result of true does not mean the Runnable will be processed -- if the looper is quit before the delivery time of the message occurs then the message will be dropped.

Offline Giacomo79

  • Utente junior
  • **
  • Post: 123
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Play Store ID:
    Big and Fish
  • Sistema operativo:
    Android 2.3
Re:Modifica della width di una TextView all'interno di un membro Runnable
« Risposta #4 il: 09 Dicembre 2013, 00:19:30 CET »
0
Se stai tentando di creare una animazione...usa le View Animation !

Usare public final boolean postDelayed (Runnable r, long delayMillis) della classe Handler potrebbe portare ad un comportamento non sempre sperato (dipende anche da come lo si usa), come spiegato nel reference, poichè tale metodo ritorna un valore booleano di conferma dell'avvenuto "accodamento" della richiesta, ma anche una risposta positiva potrebbe non essere processata se il tempo di attesa supera il tempo di esecuzione del looper...
Non avevo pensato ad una Animation. Solo che mi servirebbe aumentare la larghezza di una View in tempi stabiliti da me. E' possibile?

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Modifica della width di una TextView all'interno di un membro Runnable
« Risposta #5 il: 09 Dicembre 2013, 00:39:57 CET »
0
Certo.
Citazione da: GUIDA ANDROID
...you can define a starting time for the animation with Animation.setStartTime(), then assign the animation to the View with View.setAnimation().

Comunque se leggi la guida ufficiale android sulle View Animation ti spiega tutto quello puoi fare.