2015-07-17 22 views
5

Ich möchte eine Ripple dynamisch im Code erstellen.Konnte RippleDrawable nicht finden

Code:

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

Dieses auf Lollipop arbeitet aber macht die App Absturz auf meinem GNEX (4.3).
Fehler:

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

Aber RippleDrawable wird nie auf GNEX verwendet, da Code nicht ausgeführt wird.

Wie kann ich das beheben?

Antwort

4

Das Problem besteht darin, dass Sie in getPressedColorRippleDrawable ein Drawable anstelle eines RippleDrawable zurückgeben müssen. Andernfalls erhalten Sie bei Pre-Lollipop-Geräten einen VerifyError.

1

Dieser Code wird tatsächlich nicht ausgeführt. Die App stürzt ab, weil Sie eine java.lang.VerifyError empfangen. Versuchen Sie, eine Project → Clean durchzuführen, wenn Sie Eclipse verwenden, oder Build → Rebuild project, wenn Sie Android Studio verwenden.