2011-12-16 18 views
7

Mam jedną czynność listy, która zapełnia się po kliknięciu na jedną kartę, problem polega na tym, że kolor listy zmienia kolor na czarny podczas jej przewijania, mimo że nie ustawiłem żadnych atrybutów, aby tak się stało. Wszelkie sugestie aby uniknąć tego problemu? Dzięki,Kolor listy zmienia kolor na czarny podczas przewijania

+1

myślę u trzeba sprawdzić ten link [http://stackoverflow.com/questions/2833057/background- ListView, staje się czarny, gdy zwijający] [1] [1]: http://stackoverflow.com/questions/2833057/background-listview-becomes-black-when-scrolling – androidGuy

Odpowiedz

21

Dodaj to do listView w pliku XML:

android:cacheColorHint="#00000000" 

lub w kodzie Java:

getListView().setCacheColorHint(0); 
0

Czy może ustawić motyw w swojej działalności lub aplikacji, która korzysta z

Jest to sztuczka, która przyspiesza rysowanie 2D, gdy ave widok (zwykle surfaceView), który wypełnia rodzic. Widzę to powodują nieparzyste renderowanie tła listViews i scrollViews.

Jeśli korzystasz z zerowego hackowania tła, możesz spróbować ustawić kolor tła dla widoku listy i założę się, że problemy z przewijaniem zmniejszą się.

7

Proponuję, aby przejść przez ten artykuł: ListView Backgrounds: An Optimization, to musi przeczytać artykuł przed dostosowaniem wyglądu LitsView.

Zrobione z powyższego dokumentu:

Jak wspomniano wcześniej, ListView ma przezroczyste/półprzezroczyste tło domyślnie i tak wszystkie widżety domyślne zestawu narzędzi Android UI. Oznacza to, że gdy ListView przerysowuje swoje elementy podrzędne, musi mieszać dzieci z tłem w tle:. Ponownie wymaga to kosztownych odczytów z pamięci, które są szczególnie bolesne podczas przewijania lub rzucania, gdy rysowanie odbywa się kilkanaście razy na sekundę.

Aby poprawić wydajność rysowania podczas operacji przewijania, platforma Android ponownie wykorzystuje podpowiedź koloru pamięci podręcznej. Po ustawieniu tej wskazówki struktura kopiuje każdy element podrzędny listy w bitmapie wypełnionym wartością podpowiedzi (zakładając, że inna optymalizacja, zwana przewijaną pamięcią podręczną, nie jest wyłączona). ListView następnie miesza te bitmapy bezpośrednio na ekranie i ponieważ te bitmapy są znane jako nieprzezroczyste, nie jest wymagane mieszanie. Ponadto, ponieważ domyślną wskazówką dotyczącą koloru pamięci podręcznej jest # 191919, za każdym elementem podczas przewijania dostajesz ciemne tło.

Aby rozwiązać ten problem, należy najpierw wyłączyć optymalizację podpowiedzi koloru pamięci podręcznej, użyć kolorowego tła lub ustawić podpowiedź na odpowiednią jednolitą wartość koloru. Możesz to zrobić z kodu (zobacz setCacheColorHint(int)) lub najlepiej z XML, używając atrybutu android: cacheColorHint. Aby wyłączyć optymalizację, po prostu użyj przezroczystego koloru #00000000.Poniższy zrzut ekranu pokazuje listę z android:cacheColorHint="#00000000" ustawiony w pliku XML szablonu

+0

związek powyżej jest teraz 404. Możesz s ee oryginalny blog autorstwa Romain Guy tutaj: http://www.curious-creature.org/2008/12/22/why-is-my-list-black-an-android-optimization/ – bkurzius

+0

@bkurzius tak to jest zepsute Wydaje mi się, że stało się tak dlatego, że strona na Androida została przeprojektowana. Oto oryginalny artykuł na stronie developers.android.com: http://android-developers.blogspot.in/2009/01/why-is-my-list-black-android.html –

0

Wiem, że późno, aby odpowiedzieć na to pytanie, ale dla innych, którzy stoją w obliczu tego problemu:

Powyższe techniki mogą działać, ale rzeczywisty jedna rzecz należy zrobić jest dodanie

android:scrollingCache="false" 

w układzie lista. Podoba Ci się to

 <ListView 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:id="@+id/myList" 
    android:scrollingCache="false" 
    /> 

można uzyskać powód to stąd scrollingCache?

Dzięki

Powiązane problemy