2015-07-17 11 views
5

Voglio creare un ripple dinamicamente nel codice.Impossibile trovare RippleDrawable

Codice:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     buyButton.setBackground(getPressedColorRippleDrawable(primaryColor, darkerVariant)); 
} 

public static RippleDrawable getPressedColorRippleDrawable(int color, int darkerVariant) { 
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     ColorStateList colorStateList = new ColorStateList(
       new int[][] 
         {new int[]{}}, 
       new int[] 
         {darkerVariant} 
     ); 
     return new RippleDrawable(colorStateList, new ColorDrawable(color), null); 
    } 
    return null; 
} 

Questo funziona su Lollipop, ma rende l'incidente applicazione sul mio GNEX (4.3).
Errore:

Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method fragments.ProductDetailFragment.getPressedColorRippleDrawable

07-17 12:57:45.757 30992-30992/com.comizzo.ginsonline E/AndroidRuntime﹕ FATAL EXCEPTION: main

java.lang.VerifyError: fragments/ProductDetailFragment

Ma RippleDrawable non viene mai utilizzato su GNEX perché il codice non viene eseguito.

Come posso risolvere questo?

risposta

4

Il problema è che è necessario restituire un Drawable anziché un RippleDrawable in getPressedColorRippleDrawable. Altrimenti, sui dispositivi pre-lecca-lecca, otterrai un VerifyError.

1

Questo codice non viene effettivamente eseguito. L'app si arresta in modo anomalo perché stai ricevendo un java.lang.VerifyError. Prova ad eseguire uno Project → Clean se utilizzi Eclipse o Build → Rebuild project se utilizzi Android Studio.