5

Tôi đang sử dụng DrawableCompat.wrap để đặt màu vào các bản vẽ trong Lollipop trước và nó hoạt động tốt. DrawableCompat.unwrap không hoạt động trước Lollipop. Tôi không thể lấy bản gốc có thể kéo được trước sắc thái.DrawableCompat.unwrap không hoạt động trước Lollipop

Ví dụ:

if (v.isSelected()){ 
       Drawable normalDrawable = getResources().getDrawable(R.drawable.sample); 
       Drawable wrapDrawable = DrawableCompat.wrap(normalDrawable); 
       DrawableCompat.setTint(wrapDrawable, getResources().getColor(R.color.sample_color)); 
       imageButton.setImageDrawable(wrapDrawable); 
}else{ 
       Drawable normalDrawable = imageButton.getDrawable(); 
       Drawable unwrapDrawable = DrawableCompat.unwrap(normalDrawable); 
       imageButton.setImageDrawable(unwrapDrawable); 
} 

Trong các thiết bị kẹo trước DrawableCompact.unwrap trả về drawable với màu và không phải là gốc một

+0

Bất kỳ tin tức về điều này? Bạn đã tìm thấy giải pháp chưa? – chrisonline

+0

@chrisonline Không có gì mới. Chúng tôi không sử dụng chức năng này vì hành vi này, điều này thật không may vì nó là một công cụ mạnh mẽ. – user1787773

Trả lời

1

Nếu bạn muốn xóa màu, gọi DrawableCompat.setTintList(drawable, null).

Unwrap không phải là chức năng phá hoại, chỉ ở đó để bạn có quyền truy cập vào Bản vẽ gốc.

Sau đây là một mã dụ:

Drawable drawable = (Drawable) ContextCompat.getDrawable(getContext(), R.drawable.google_image); 
if (condition) { 
    drawable = DrawableCompat.wrap(drawable); 
    DrawableCompat.setTint(drawable, ContextCompat.getColor(getContext(), R.color.grey700)); 
    DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SCREEN); 
    mImageView.setImageDrawable(drawable); 
} else { 
    drawable = DrawableCompat.unwrap(drawable); 
    DrawableCompat.setTintList(drawable, null); 
    mLoginStatusGoogleImageView.setImageDrawable(drawable); 
} 

Trong trường hợp của bạn mã nên được:

if (v.isSelected()) { 
    Drawable normalDrawable = getResources().getDrawable(R.drawable.sample); 
    Drawable wrapDrawable = DrawableCompat.wrap(normalDrawable); 
    DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(getContext(), R.color.sample_color)); 
    DrawableCompat.setTint(wrapDrawable, getResources().getColor(R.color.sample_color)); 
    imageButton.setImageDrawable(wrapDrawable); 
} else { 
    Drawable normalDrawable = imageButton.getDrawable(); 
    Drawable unwrapDrawable = DrawableCompat.unwrap(normalDrawable); 
    DrawableCompat.setTintList(unwrapDrawable, null); 
    imageButton.setImageDrawable(unwrapDrawable); 
} 
Các vấn đề liên quan