2012-05-21 9 views
5

Podążając za pytaniem: Animate change of view background color on Android Próbuję zrobić TextView, aby zniknął między dwoma środowiskami za pośrednictwem zasobu TransitionDrawable. Mój plik xml przejście wygląda następująco:TransitionDrawable jako tło w TextView nie działa zgodnie z oczekiwaniami

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

I spróbuj ustawić go jako tło na starcie przez:

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

wynik jest, że TextView przekształca z tego:

Textview with gray_bar background do tego: Textview with green_bar background

Gdy cały szary pasek powinien zostać przekształcony na g jeden raz.

Oba są obrazami w rozdzielczości 9 png. Są to oryginały:

gray_bar green_bar

Domyślam się, że zielony pasek wypełnia przestrzeń dostępna dla tekstu wewnątrz szarym pasku, ale nie wiem dlaczego. Jakieś wskazówki? Szara również wydaje się dużo większa niż powinna, ale nie zmienia rozmiaru przed, w trakcie lub po przejściu, pomimo pojawienia się dołączonych obrazów. Może to być problem z 9-plasterkowymi obrazami, ponieważ przetestowałem normalne obrazy, a przejście działa świetnie.

Dzięki za pomoc!

+0

Mam dokładnie ten sam problem ... czy udało ci się rozwiązać to w jakikolwiek sposób? – zwebie

+0

hmmm, w przykładzie google używają setImageDrawable może setbackground nie jest oczekiwanym zachowaniem, jeśli nie, to możesz umieścić obraz jako "tło" (używając względnego układu umieść go pod tekstem) i po prostu uruchom przejście na to może ? – MikeIsrael

+0

Nie, to też nie działa. Zmieniłem kolor na zamiast obrazów. Sugeruję, że jest to problem z 9 łatami, ponieważ testowałem ten sam kod z normalnymi obrazami i działałem zgodnie z oczekiwaniami. Tak więc, zwebie, działa z kolorem zamiast 9-plasterkowym, aw moim przypadku działa z normalnymi (bez 9-łatek) obrazami. – viridis

Odpowiedz

0

Udało mi się odtworzyć problem, który widzisz z zielonym paskiem, nie zajmując całej przestrzeni szarej. Aby to naprawić, weź szary pasek 9 i rozciągnij linie na dole i prawej stronie do jednego piksela od rogów.

Na marginesie, kolejnym potencjalnym problemem związanym z dziewięcioma łatami jest to, że wraz ze wzrostem zawartości obraz będzie miał artefakty wizualne rozciągające się pionowo. Jest to wynik wysokości czarnego paska po lewej stronie obrazu, który określa, która część 9-plasterka powinna się rozciągać. Dalszym ulepszeniem tych 9-łatek byłoby zmniejszenie czarnej linii po lewej stronie do zaledwie jednego piksela w samym środku lewej krawędzi. Ponieważ tylko jeden piksel jest oznaczony jako rozciągliwy, powinien on zapewniać ładną, wyraźną pionową krawędź, jeśli zwiększa się wysokość wyciągnięcia.

Jeśli podasz swój kod układu, być może będę mógł pomóc Ci w rozwiązaniu innych problemów związanych z wielkością.

Powiązane problemy