Załóżmy, że mamy niestandardowy ListView
, który rozszerza metodę onDraw()
przez narysowanie w niej jakiegoś prostokąta.Jak nakładać kolor tekstu na liście w określonym regionie?
class Listpicker extends ListView {
//..Some other methods here..//
@Override
protected void onDraw(android.graphics.Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(glassPickerBitmap, null, glassRect, semiTransparrentPaint);
}
}
bitmapy sporządzony stanowią jakiś szkła, które jest prostokątem o szerokości równej szerokości pogrupowanych i niektóre wysokości. To, czego chcę, to gdy element listy przewija się do tego prostokąta, kolor używany do rysowania tekstu (nie wszystkie elementy z tłem itp.) Zostałyby zmienione na inny kolor. Tak więc, na przykład, gdy element listy jest dopasowany tak, że tylko połowa wysokości tekstu pasuje do glassPickerBitmap
, zewnętrzna część elementu listy powinna pozostać w swoich kolorach porządkowych, a część znajdująca się w środku glassPickerBitmap
powinna zmienić kolor tekstu. Elementy listy są prostymi widokami tekstowymi bez żadnego tła.
Jak można to osiągnąć? Może każdy ColorFilter
s jest przypisany do Paint
? Ale gdzie? onDraw()
metoda Listview
nie jest wywoływana nawet po przewinięciu ListView
... Czy można to zrobić w niestandardowych widokach, na przykład, które będą elementami ListView
? Lub może być trochę Color/Shader/nie wiem, co jeszcze można użyć nakładki tutaj, ale gdzie?
EDIT (dodawane przykładów zdjęcia)
Oto przykład pewnych upraw z APP rzeczywistych. Istnieją 2 ListView
s: jeden po lewej stronie, drugi po prawej. Szkło to szary prostokąt. Teraz wybrana jest wybrana z lewej listy "dolar amerykański". I przewijam w prawo ListView
w ten sposób, że wybór jest gdzieś pomiędzy USD i Afghan Afghani. Teraz chcę, aby USD waluta po lewej stronie ListView
byłaby narysowana na czerwono (dokładny kolor nie ma znaczenia, zmienię go później na coś znaczącego) ORAZ, w tym samym czasie, dolna część "Dolar amerykański" i górna część "Afghan Afghani" w prawej ListView zostanie narysowany również w tym samym czerwonym kolorze.
Ta zmiana koloru powinna być wykonywana w sposób dynamiczny - kolor powinien być zmieniany tylko dla części tekstu, która jest pod szklanym prostokątem podczas przewijania listy.
* OK, EUR i USD są tutaj specjalnymi walutami narysowanymi w niestandardowym kolorze cyjan. Pytanie dotyczy co najmniej tekstu o kolorze biały. Ale jeśli będzie można zmienić również kolor cyjan, byłoby świetnie.
'View.setWillNotDraw' (logiczna willNotDraw) powinien dostać' onDraw' nazwie w 'ListView'. To, czy pozwoli ci to osiągnąć to, co chcesz, jest dyskusyjne. Interesujące pytanie jednak. – techiServices
@Prizoff możesz podać dwa zdjęcia (jeden z przedmiotów zwykłych i drugi z przedmiotu pod szkłem)? – eveliotc
@EvelioTarazona zrobione – Prizoff