Ứng dụng tôi hiện đang làm việc trên sử dụng rất nhiều ImageViews làm nút. Đồ họa trên các nút này sử dụng kênh alpha để làm mờ các cạnh của nút và khiến chúng trông không đều. Hiện tại, chúng ta phải tạo 2 đồ họa cho mỗi nút (1 cho trạng thái được chọn/tập trung/nhấn và cái kia cho trạng thái không được chọn mặc định) và sử dụng một StateListDrawable được định nghĩa trong một tệp XML cho mỗi nút.Màu/mờ có thể vẽ trên màn hình
Trong khi điều này hoạt động tốt có vẻ như rất lãng phí vì tất cả các đồ họa được chọn chỉ đơn giản là phiên bản màu của các nút không được chọn. Những thời gian này để sản xuất (tuy nhiên ít) và chiếm không gian trong APK cuối cùng. Có vẻ như có một cách dễ dàng để điều này tự động.
Giải pháp hoàn hảo, dường như, là sử dụng ImageViews cho mỗi nút và chỉ định trong thuộc tính màu của nó là một ColorStateList. Cách tiếp cận này có lợi thế là chỉ một XML ColorStateList đơn là cần thiết cho tất cả các nút (chia sẻ cùng một màu). Tuy nhiên, nó không hoạt động. Như đã đề cập here, ImageView ném một NumberFormatException khi giá trị được cung cấp cho màu là bất kỳ thứ gì ngoài một màu.
Nỗ lực tiếp theo của tôi là sử dụng LayerDrawable cho đối tượng được chọn. Bên trong danh sách lớp, chúng tôi sẽ có hình ảnh gốc ở dưới cùng của ngăn xếp được bao phủ bởi một hình chữ nhật bán trong suốt. Điều này làm việc trên các phần rắn của đồ họa nút. Tuy nhiên, các cạnh được cho là hoàn toàn trong suốt, bây giờ có cùng màu với lớp trên cùng.
Có ai gặp sự cố này trước đây và tìm thấy giải pháp hợp lý không? Tôi muốn gắn bó với các cách tiếp cận XML nhưng có lẽ sẽ mã hóa một lớp con ImageView đơn giản sẽ thực hiện việc nhuộm màu theo yêu cầu trong mã.
Làm cách nào để nó hoạt động tốt cho các tệp 9-patch, sao cho toàn bộ khu vực không trong suốt của hình ảnh sẽ bị tối khi các sự kiện cảm ứng? Hiện tại những gì nó làm cho hình ảnh 9-vá là chỉ thay đổi phần được định nghĩa là nội dung của hình ảnh, chứ không phải toàn bộ hình ảnh ... –