2012-05-21 6 views
5

Dopo la domanda: Animate change of view background color on Android Sto cercando di rendere un TextView in dissolvenza tra due sfondi tramite la risorsa TransitionDrawable. Il mio file di transizione XML è simile al seguente:TransitionDrawable come sfondo in TextView non funziona come previsto

<?xml version="1.0" encoding="utf-8"?> 
<transition xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:drawable="@drawable/gray_bar" /> 
    <item android:drawable="@drawable/green_bar" /> 
</transition> 

e cerco di impostarla come sfondo il runtime:

TextView answerBox = (TextView) findViewById(R.id.answerBox); 
answerBox.setBackgroundResource(R.drawable.correct_transition); 
TransitionDrawable transition = (TransitionDrawable) answerBox.getBackground(); 
transition.startTransition(1500); 

Il risultato è che il TextView trasforma da questo:

Textview with gray_bar background a questo: Textview with green_bar background

Quando l'intera barra grigia deve essere trasformata in g uno

Entrambe sono immagini png a 9 patch. Questi sono gli originali:

gray_bar green_bar

La mia ipotesi è che la barra verde si sta riempiendo lo spazio disponibile per il testo all'interno della barra grigia, ma io non so perché. Qualche indizio? Il grigio appare anche molto più grande di quanto dovrebbe, ma non cambia dimensione prima, durante o dopo la transizione, nonostante l'aspetto delle immagini incluse. Potrebbe essere un problema con le immagini a 9 patch perché ho testato immagini normali e la transizione funziona alla grande.

Grazie per qualsiasi aiuto!

+0

Ho lo stesso identico problema ... sei riuscito a risolvere questo in qualche modo? – zwebie

+0

hmmm, nell'esempio di google usano setImageDrawable forse il setbackground non è un comportamento previsto, se non lo è, allora puoi mettere una imageview come "sfondo" (usando il layout relativo posizionalo sotto la textview) e basta eseguire la transizione su quella forse ? – MikeIsrael

+0

No, non funziona neanche. Sono passato al colore invece delle immagini. Suggerisco che è un problema di 9 patch perché ho testato lo stesso codice con immagini normali e ho funzionato come previsto. Quindi, zwebie, funziona con il colore anziché con le immagini a 9 patch e nel mio caso funziona con le immagini normali (non a 9 patch). – viridis

risposta

0

Sono riuscito a riprodurre il problema che si sta verificando con la barra verde che non occupa tutto lo spazio grigio. Per risolvere il problema, prendi la barra di colore grigio 9-patch ed estendi le linee sul lato inferiore e destro a un pixel di distanza dagli angoli.

In una nota a margine, un altro potenziale problema con le 9 patch è che, man mano che il contenuto aumenta di altezza, l'immagine avrà artefatti visivi mentre si estende verticalmente. Questo è il risultato dell'altezza della barra nera sul lato sinistro dell'immagine, che determina quale parte della 9-patch dovrebbe allungarsi. Un ulteriore miglioramento di queste 9 patch sarebbe quello di ridurre la linea nera a sinistra a un solo pixel al centro del lato sinistro. Poiché solo un pixel è contrassegnato come estensibile, questo dovrebbe darti un bel bordo verticale se il tuo drawable aumenta di altezza.

Se si include il codice di layout, potrei essere in grado di aiutarvi con gli altri problemi di dimensionamento.