2012-05-17 8 views
5

Mam aplikację, która umożliwia użytkownikom tworzenie skomplikowanych układów ekranu z zestawu wstępnie zdefiniowanych elementów sterujących. Następnie te kontrolki rozmawiają ze sobą, aby wygenerować ostateczną funkcjonalność. Problem, który widzę, polega na tym, że bez względu na to, co robię, wydaje się, że każde przerysowanie spowodowane zmianą jednego kontrolka wymusza ponowne rysowanie całego ekranu (co widać po włączeniu "Pokaż zmiany ekranu"). Ponieważ mam wiele niestandardowych elementów sterujących bez znacznej ilości XML, to ponowne rysowanie może być dość powolne.Jak powstrzymać Androida przed ponownym rysowaniem całego ekranu, gdy coś się zmieni?

Na przykład jednym elementem sterującym może być kalkulator zbudowany na podstawie kilku układów liniowych. Innym może być dynamicznie generowana siatka poleceń z liniowych układów. Każdy z nich jest następnie dodawany do nadrzędnego układu względnego po załadowaniu ekranu. Naciśnięcie klawisza na kalkulatorze wymusza ponowne rysowanie siatki poleceń, nawet jeśli nic nie zmieniło się w żadnym z jej widoków.

Próbowałem włączyć akcelerację sprzętową i zmienić wszystkie typy warstw widoku na LAYER_TYPE_HARDWARE bez powodzenia.

Jak zapewnić, że przerysowana zostanie tylko określona podsekcja ekranu? W tym momencie nie robię żadnych połączeń, aby unieważnić siebie, ale mam własne wersje tematyczne przycisków, układów i innych składników interfejsu użytkownika, więc jeśli muszę przejść do tego poziomu kontroli, przynajmniej istnieje już framework w zamian za to.

Odpowiedz

0

wygląda to dość dużo jak ten .. Moving Android View and preventing onDraw to be called over and over again jednak jeśli po prostu chcesz narysować punkt, spróbuj dzwoniąc invalidate(rect) gdzie rect jest to Rect że można zdefiniować obszar, który będzie „odświeżana”, inne niż AFAIK ciebie żargon.

+0

Nie do końca, może nie wyjaśniam tego dobrze. Mam przycisk na ekranie. Po naciśnięciu tego przycisku zmienia się na wciśnięty. To oczywiście wymaga odświeżenia przycisku. Ale widzę, że cały ekran został przerysowany, a nie tylko przycisk. Nie odwołuję się do unieważniania, po prostu pozwalając, by podstawowy widget na Androida zrobił swoje. To musi być możliwe. Grałem z innymi aplikacjami na urządzeniu z włączoną opcją Pokazuj zmiany ekranu i widzę, że niektóre z nich przerysowują tylko części ekranu, podczas gdy inne przerysowują je wszystkie. Nawet moja aplikacja ogranicza się, gdy używam okien dialogowych lub toastów. –

+0

Mam różne niestandardowe wersje przycisków, układów itp., Ale są one bardzo proste i nie zastępuję żadnych funkcji związanych z cyklem losowania. –

Powiązane problemy