5

Я использую DrawableCompat.wrap, чтобы установить оттенок на drawables в pre Lollipop, и он отлично работает. DrawableCompat.unwrap не работает pre Lollipop. Я не могу получить оригинал, который можно сделать перед оттенком.DrawableCompat.unwrap не работает pre Lollipop

Например:

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); 
} 

В устройствах до леденцов DrawableCompact.unwrap возвращает вытяжку с отливом, а не оригинал один

+0

Все новости об этом? Вы нашли решение? – chrisonline

+0

@chrisonline Ничего нового. Мы не используем эту функциональность из-за этого поведения, что является неудачным, потому что это сильный инструмент. – user1787773

ответ

1

Если вы хотите, чтобы очистить оттенок, называют DrawableCompat.setTintList(drawable, null).

Unwrap не является разрушительной функцией, это только для вас, чтобы получить доступ к оригинальному Drawable.

Ниже приведен пример кода :

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); 
} 

В вашем случае код должен быть:

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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^