Giả sử chúng ta có tùy chỉnh ListView
mở rộng phương thức onDraw()
bằng cách vẽ một số hình chữ nhật trong đó.Cách phủ màu văn bản của mục danh sách trong khu vực cụ thể?
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);
}
}
Bitmap được vẽ đại diện cho một số loại kính là hình chữ nhật có chiều rộng bằng chiều rộng của listview và một số chiều cao. Những gì tôi muốn là khi mục danh sách cuộn vào hình chữ nhật này, màu được sử dụng để vẽ văn bản (không phải tất cả các mục có nền và vv) sẽ được thay đổi thành một số màu khác. Vì vậy, ví dụ, khi mục danh sách phù hợp để chỉ có một nửa chiều cao của văn bản phù hợp với glassPickerBitmap
, phần bên ngoài của mục danh sách phải giữ nguyên màu sắc của nó và phần bên trong glassPickerBitmap
sẽ thay đổi màu văn bản của nó. Các mục danh sách là TextView đơn giản mà không có bất kỳ nền nào.
Làm cách nào để đạt được điều này? Có thể bất kỳ ColorFilter
nào được gán cho Paint
? Nhưng ở đâu? Phương pháp onDraw()
của Listview
thậm chí không được gọi khi ListView
được cuộn ... Có thể thực hiện điều này bên trong các chế độ xem được tùy chỉnh, ví dụ, đó sẽ là các mục của ListView
? Hoặc có thể là một số màu/Shader/không biết những gì khác lớp phủ có thể được sử dụng ở đây, nhưng nơi?
EDIT (thêm ví dụ hình ảnh):
Dưới đây là ví dụ về một số cây trồng từ ứng dụng thực tế cuộc sống. Có 2 ListView
s: một ở bên trái, ở bên phải. Glass là hình chữ nhật màu xám. Bây giờ, danh sách trái có "Đô la Mỹ" đơn vị tiền tệ được chọn. Và tôi di chuyển sang phải ListView
theo cách đó, lựa chọn đó là nơi nào đó giữa USD và Afghanistan Afghanistan. Bây giờ, những gì tôi muốn, đó làUSD tiền tệ trong ListView
trái sẽ được rút ra trong màu đỏ (màu chính xác không quan trọng bây giờ, tôi sẽ thay đổi nó sau một cái gì đó có ý nghĩa) AND, trong cùng một thời điểm, phần dưới cùng của "Đô la Mỹ" và phần trên cùng của "Afghanistan Afghanistan" ở bên phải ListView cũng sẽ được vẽ cùng màu đỏ.
thay đổi màu sắc này nên được thực hiện theo cách năng động - màu nên được thay đổi chỉ cho một phần của văn bản đó là dưới hình chữ nhật kính trong suốt cuộn danh sách.
* OK, EUR và USD dưới đây là loại tiền tệ đặc biệt được vẽ bằng màu lục lam không chuẩn. Câu hỏi đặt ra là ít nhất văn bản có màu màu trắng. Nhưng nếu nó sẽ có thể thay đổi màu lục lam cũng sẽ rất tuyệt.
'View.setWillNotDraw' (boolean willNotDraw) nên được' onDraw' gọi trong 'ListView'. Cho dù điều đó sau đó sẽ cho phép bạn đạt được những gì bạn muốn là gây tranh cãi. Tuy nhiên, câu hỏi thú vị. – techiServices
@Prizoff bạn có thể cung cấp hai hình ảnh (một trong những mục thông thường và mặt hàng khác của mặt hàng bên dưới kính) không? – eveliotc
@EvelioTarazona thực hiện – Prizoff