2013-05-10 10 views
9

Załóżmy, że TextViewJak często można zaktualizować TextView bez bałaganu

TextView tvSum = findViewById(R.id.sumTexviewId); 

Jeśli chcę zmienić wyświetlany tekst, mogę to zrobić:

tvSum.setText("£0.00"); 

Teraz zakładając zrobić to regularnie, powiedz za każdym naciśnięciem przycisku, być może pokazując sumę wpisaną na kasie. W tym przykładzie naciskasz jeden, mówi "1p", następnie naciskasz dwa, a mówi "12p" i tak dalej.

Uważam, że jeśli to zrobię, tekst zostanie po chwili zniekształcony. Dla sekwencji 12345, na początek wszystko jest dobre: ​​

  • 0p (nic jeszcze wciśnięty)
  • 1p ("1" wciśnięty)
  • 12p (nacisnął "2")
  • £1.23 (następnie "3" wciśnięty)

Jednakże, po czym robi się bałagan:

  • Mess: £12.34 (następnie "4" wciśnięty)
  • Mess: £123.45 (następnie "5" wciśnięty)

To nigdy nie staje się lepiej później. Nie napisałem kodu, ponieważ kod jest naprawdę bardzo prosty: kilka przycisków i tylko napisanie jednego krótkiego ciągu do jednego tekstu - nic w kodzie nie powinno tego powodować, szczerze mówiąc. (Tak, sprawdziłem, czy napisany napis jest poprawny, umieszczając go na Toast.) Czy ktoś inny natknął się na to, a jeśli tak, to co go rozwiązało?

+0

Proponuję usunięcie pamięci podręcznej rysunku (setDrawingCacheEnabled (false)) –

+0

To bardzo mylące. Jesteś pewien, że nie robisz z tym nic nadzwyczajnego? – Ahmad

+0

Tak, w tym momencie myślę, że pomogłoby Ci opublikować minimalny kompletny program demonstrujący problem. –

Odpowiedz

5

Okazało się, że Mr.Me szukał we właściwym kierunku i miało to jakiś związek ze sposobem renderowania tła po zmianie tekstu. Ustawiłem (celowo) przycisk, aby mieć przezroczyste tło wewnątrz żółtego konturu (zamiast pozostawiać go nieokreślonego), używając koloru 0x00000000.

Z jakiegoś powodu, przy stosowaniu wypełnień nie do końca nieprzezroczystych, nowe tło jest układane nad poprzednią zawartością (cykl około 3 bitmap, jak sądzę) zamiast definiowania zawartości. Przypuszczam, że jest to prawdopodobnie spowodowane domyślnym trybem transferu PorterDuff używanym przez Canvas.

Solutions mam wymyślić podczas pracy na to uwagę:

  1. Zostaw tła nieokreślony. Jest to również przejrzyste, ale z jakiegoś powodu aktywnie tak.
  2. Masz jakiekolwiek pełne tło alfa. (Wada: nie działa, jeśli potrzebujesz przezroczystości)
  3. Napisz niestandardowy widok, który zastępuje onDraw, aby aktywnie wypełnić płótno z 0x00 przed wywołaniem super.onDraw(). (Wada:. Ten pozbywa dowolnym tle w tym widoku, ale zachowuje Wyświetleń tył tego widoku

przeprosiny za „nic nie robić” fantazyjny oświadczeniu - Nie zdawałem sobie sprawy, że aktywnie ustawienie tła na przezroczyste policzone jako fantazyjne!

+0

Witam @Neil Mam ten sam problem. inne rozwiązania tego typu? – bman

+0

@ bman próbowałem trzy pomysły, które daję? Co się dzieje? –

+0

bardzo przydatne .. Mogłabym rozwiązać mój problem – rags

Powiązane problemy