5

Sto utilizzando DrawableCompat.wrap per impostare la tinta sui drawable in pre Lollipop e funziona correttamente. DrawableCompat.unwrap non funziona pre Lollipop. Non riesco a ottenere il disegno originale prima della tinta.DrawableCompat.unwrap non funziona pre Lollipop

Ad esempio:

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

Nei dispositivi lollipop pre DrawableCompact.unwrap restituisce drawable con la tinta e non quella originale

+0

notizie di questo? Hai trovato una soluzione? – chrisonline

+0

@chrisonline Niente di nuovo. Non stiamo utilizzando questa funzionalità a causa di questo comportamento, che è sfortunato perché è uno strumento forte. – user1787773

risposta

1

Se si desidera cancellare la tinta, chiamano DrawableCompat.setTintList(drawable, null).

Unwrap non è una funzione distruttiva, è solo lì per voi per ottenere l'accesso al Drawable originale.

Il seguente è un codice di esempio :

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

In tuo caso il codice dovrebbe essere:

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