2012-05-21 4 views
5

Nach der Frage: Animate change of view background color on Android Ich versuche, eine TextView zwischen zwei Hintergründe über TransitionDrawable Ressource zu verblassen. Mein Übergang XML-Datei sieht wie folgt aus:TransitionDrawable als Hintergrund in TextView funktioniert nicht wie erwartet

<?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> 

Und ich versuche, es zu setzen als Hintergrund auf Laufzeit von:

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

Das Ergebnis ist, dass die Textview daraus verwandelt:

Textview with gray_bar background zu diesem: Textview with green_bar background

Wenn der ganze graue Stab in das g umgewandelt werden sollte reen eins.

Beide sind 9-Patch-PNG-Bilder. Dies sind die Originale:

gray_bar green_bar

Meine Vermutung ist, dass der grüne Balken füllt den Raum für Text in der grauen Leiste, aber ich weiß nicht, warum. Irgendwelche Hinweise? Das Grau erscheint auch viel größer als es sollte, ändert aber vor, während oder nach dem Übergang die Größe nicht, trotz des Erscheinens der enthaltenen Bilder. Es kann ein Problem mit den 9-Patch-Bildern sein, da ich normale Bilder getestet habe und der Übergang großartig funktioniert.

Danke für jede Hilfe!

+0

Ich habe genau das gleiche Problem ... hast du es irgendwie gelöst? – zwebie

+0

hmmm, in googles Beispiel verwenden sie setImageDrawable vielleicht ist der setbackground kein erwartetes Verhalten, wenn nicht, dann könntest du ein imageview als "background" setzen (benutze relatives Layout plaziere es unter der textview) und führe einfach den Übergang dafür aus ? – MikeIsrael

+0

Nein, das funktioniert auch nicht. Ich habe auf Farbe statt Bilder gewechselt. Ich schlage vor, dass es ein 9-Patch-Problem ist, weil ich denselben Code mit normalen Bildern getestet habe und wie erwartet funktioniert habe. Also, zwie, es arbeitet mit Farbe statt 9-Patch-Bildern, und in meinem Fall funktioniert es mit normalen (nicht 9-Patch) Bildern. – viridis

Antwort

0

Ich konnte das Problem reproduzieren, das Sie sehen, wobei der grüne Balken nicht den gesamten Platz des grauen Balkens einnimmt. Um es zu beheben, nehmen Sie den grauen Balken 9-Patch und verlängern Sie die Linien auf der unteren und rechten Seite auf ein Pixel von den Ecken entfernt.

Nebenbei bemerkt, ein weiteres potentielles Problem mit Ihren 9-Patches ist, dass Ihr Bild bei steigender Höhe visuelle Artefakte aufweist, wenn es vertikal streckt. Dies ist ein Ergebnis der Höhe des schwarzen Balkens auf der linken Seite Ihres Bildes, der bestimmt, welcher Teil des 9-Patches gedehnt werden sollte. Eine weitere Verbesserung dieser 9-Felder wäre, die schwarze Linie auf der linken Seite auf nur ein einzelnes Pixel in der Mitte der linken Kante zu reduzieren. Da nur ein Pixel als dehnbar markiert ist, sollten Sie eine schöne, scharfe vertikale Kante erhalten, wenn Ihre Zeichenhöhe größer wird.

Wenn Sie Ihren Layoutcode angeben, kann ich Ihnen möglicherweise bei Ihren anderen Dimensionierungsproblemen helfen.