Ich habe Hardwarebeschleunigung in meiner App aktiviert, aber ich habe es für eine meiner Ansichten deaktiviert, weil ich Probleme mit Strichbegrenzungen und anderen Dingen hatte.Nicht unterstützteOperationException in GLES20Canvas.clipPath mit Hardwarebeschleunigung in Sicht deaktiviert
Jetzt bin ich immer diese Stack-Trace in der Google-Crash-Fehler-Konsole Spielen:
java.lang.UnsupportedOperationException
at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:287)
at com.myapp.MyCustomView.onDraw(SourceFile:288)
at android.view.View.draw(View.java:9310)
at android.view.View.getDisplayList(View.java:8773)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2298)
...
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:609)
at android.view.ViewRoot.draw(ViewRoot.java:1634)
at android.view.ViewRoot.performTraversals(ViewRoot.java:1450)
at android.view.ViewRoot.handleMessage(ViewRoot.java:2094)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:132)
at android.app.ActivityThread.main(ActivityThread.java:4123)
...
I android:hardwareAccelerated="true"
in AndroidManifest.xml angegeben haben. Aber ich speziell deaktiviert Hardware-Beschleunigung im Konstruktor meiner benutzerdefinierten Ansicht:
public MyCustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// ... code omitted
// disable acceleration because Paint.setStrokeCap(Cap.ROUND) is not working otherwise
Compatibility.disableHardwareAcceleration(this);
}
Mit Kompatibilität wobei dies:
public class Compatibility {
// View.setLayerType() was introduced in Honeycomb
private static Method setLayerTypeMethod = getMethod(View.class, "setLayerType", int.class,
Paint.class);
private static Method getMethod(Class<?> clazz, String name, Class<?>... parameterTypes) {
try {
return clazz.getMethod(name, parameterTypes);
}
catch (NoSuchMethodException e) {
return null;
}
}
private Compatibility() {
}
public static void disableHardwareAcceleration(View view) {
try {
if (setLayerTypeMethod != null) {
int layerType = 1; // View.LAYER_TYPE_SOFTWARE
setLayerTypeMethod.invoke(view, layerType, null);
}
}
catch (Exception ignored) {
}
}
}
Leider ist die Crash-Fehler-Konsole nicht offenbaren Informationen über die Android OS-Version oder Gerät.
Irgendwelche Ideen, was passieren könnte?