Tôi đang cố gắng để thực hiện một chức năng khuôn khổ chung mà làm cho bất kỳ drawable trở nên nổi bật khi ép / tập trung / chọn / etc .
Hàm của tôi nhận Drawable và trả về StateListDrawable, trong đó trạng thái mặc định là Drawable chính nó và trạng thái cho android.R.attr.state_pressed
cũng có thể vẽ được, chỉ với một bộ lọc được áp dụng setColorFilter
.
Vấn đề của tôi là tôi không thể sao chép tệp có thể vẽ và tạo một phiên bản riêng của nó với bộ lọc được áp dụng. Đây là những gì tôi đang cố gắng đạt được:
StateListDrawable makeHighlightable(Drawable drawable)
{
StateListDrawable res = new StateListDrawable();
Drawable clone = drawable.clone(); // how do I do this??
clone.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
res.addState(new int[] {android.R.attr.state_pressed}, clone);
res.addState(new int[] { }, drawable);
return res;
}
Nếu tôi không sao chép thì rõ ràng bộ lọc được áp dụng cho cả hai trạng thái. Tôi đã thử chơi với mutate()
nhưng nó không giúp ích gì ..
Bất kỳ ý tưởng?
Cập nhật:
Câu trả lời được chấp nhận thực sự sao chép một điều có thể rút ra được. Tuy nhiên, nó không giúp được tôi vì chức năng chung của tôi bị lỗi do một vấn đề khác. Có vẻ như khi bạn thêm một drawable vào StateList, nó sẽ mất tất cả các bộ lọc của nó.