8
내 앱에서 하드웨어 가속을 사용할 수있게 설정되었지만 뇌졸중 캡 및 기타 문제가있어 내보기에서 해당 기능을 사용 중지했습니다.보기에서 하드웨어 가속을 사용하지 않는 GLES20Canvas.clipPath에서 UnsupportedOperationException이 발생했습니다.
지금은 구글이 스택 추적 충돌 오류 콘솔 플레이 받고 있어요 : 나는의 AndroidManifest.xml에 android:hardwareAccelerated="true"
를 지정
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)
...
합니다. 하지만 내 사용자 지정보기의 생성자에서 내가 특별히 사용할 하드웨어 가속 : 호환성
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);
}
이되는 :
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) {
}
}
}
는 불행하게도 충돌 오류 콘솔은 안드로이드 OS 버전이나 장치에 대한 정보를 공개하지 않습니다.
어떤 아이디어가 진행되고 있을까요?