Wpis z mikrobloga

Mirki z #programowanie #android
Mam dziwną sytuację.
Jest sobie LinearLayout, np. taki:
View1
View2
View3
LinearLayout2
Tysiąc x view_

Rysowanie 1000 x view4 zajmuje trochę czasu, to zrozumiałe, ale dlaczego, kiedy zmienię widzialność View3 na GONE to system przerysowuje mi chyba cały LineartLayout2 na nowo, tak jakbym go dopiero co tworzył - zamiast po prostu przesunąć go o ileśtam pikseli wyżej. Tworzy to straszne lagi. Czy to normalna sytuacja?
  • 9
  • Odpowiedz
@Srala-Bartek:
1. Dlaczego odrysowuje od nowa:
https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/View.java

if ((changed & GONE) != 0) {
needGlobalAttributesUpdate(false);
requestLayout();

if (((mViewFlags & VISIBILITY_MASK) == GONE)) {
if (hasFocus()) clearFocus();
clearAccessibilityFocus();
destroyDrawingCache();
if (mParent instanceof View) {
// GONE views noop invalidation, so invalidate the parent
((View) mParent).invalidate(true);
}
// Mark the view drawn to ensure that it gets invalidated properly the next
// time it is visible and gets invalidated
mPrivateFlags |= PFLAG_DRAWN;
}
  • Odpowiedz