2010-04-06 9 views
7

Jestem nowy w rozwoju Androida, czytam dokumenty i próbuję interfejsów API . Nie mam pojęcia, w jaki sposób ImageView zdołał narysować tylko część jego zawartości po unieważnieniu (Rect) inwokacji.W jaki sposób program ImageView po prostu przerysowuje część zawartości, gdy wywoływany jest nieprawidłowy (Rect)?

Sprawdziłem ImageView.java, znalazł żadnego innego sposobu rysowania z wyjątkiem OnDraw (Canvas), ale OnDraw (Canvas) tylko wyciąć rozciągliwej tylko jeśli jest beyound widoku za widoczną granicę. Przeczytałem również wdrożenie View.invalidate (Rect), myślę, że klucz tej funkcji dzwoni do mParent.invalidateChild (this, r); Jednak myślę, że widok rodzica nie wie, jak narysować dziecko w danego Recta, to w końcu musi wywołać jakiś sposób tego dziecka do malowania na .

Czy ktoś badał tę część kodów? Czy mógłbyś dać mi jakiś przewodnik?

Odpowiedz

1

Zgaduję, że kod jest w klasie View.

Istnieją dwie interesujące odpowiedzi od Romain Guy w grupie google.

+0

-1, ponieważ oba łącza są już martwe. W tym niektóre z ich treści byłyby lepsze. –

+1

+1, ponieważ linki nie są martwe ... Właśnie je przetestowałem. Zgadzam się jednak, że dodawanie treści jest dobrą rzeczą w takich przypadkach. – Justin

0

myślę android narysować widok podobnie jak płótno w J2ME, cały kod losowanie nie jest rysować bezpośrednio do sprzętu (ekran), to po prostu wyciągnąć do bufora lub drawable lub coś takiego. Kiedy wywołujemy View.invalidate (Rect), to system kopiuje obraz do bufora (lub losowania) na sprzęt (ekran).

3

O ile mogę zebrać, są dwie optymalizacje. Po pierwsze, jeśli dziecko jest grupą widokową, przerysowywane są tylko te dzieci z tej grupy, które przecinają unieważniony obszar. Również płótno jest przycięte do granic tego prostokąta. Oznacza to, że mniej pikseli należy przetasować przez magistralę do bufora ramki, a operacje rysowania, które są całkowicie obcięte, można pominąć.

To jest pół-wykształcone domysły. Przeglądałem źródło kilka miesięcy temu i jestem całkiem pewien rzeczy ViewGroup. Drugi może być testowany przez nadpisanie przycinania w onDraw i sprawdzenie czy przerysowuje wszystko.

+0

Jestem nowicjuszem dla Androida i mam pytanie tutaj http://stackoverflow.com/questions/21027199/am-i-invalidating-the-entire-screen-on-every-all- Proszę podać odpowiedź, jeśli to możliwe . – Kraken

Powiązane problemy