我有一個自定義AdapterView,它覆蓋了drawChild在畫布動畫期間剪輯子視圖。如何檢查畫布功能是否支持給定設備上的硬件加速?
這似乎在蜂窩上工作得很好,但一旦加載到Android 4.0平板電腦上就會死亡。我懷疑這是因爲Android 4.0會默認打開硬件加速,並且我正在使用的一種或多種畫布方法不支持使用特定設備上的硬件加速(Acer A100 with ICS 4.0.3)
此處是我drawChild方法(從我NinjaMenu.java類):
@Override
protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
final int top = child.getTop();
final int left = child.getLeft();
Bitmap bitmap = child.getDrawingCache();
if (bitmap == null) {
child.setDrawingCacheEnabled(true);
child.buildDrawingCache();
bitmap = child.getDrawingCache();
}
if (mCutPath != null) {
// clip child views so that they partially show
// as menu is expanded
canvas.clipPath(mCutPath);
canvas.drawBitmap(bitmap, left, top, null);
}
return false;
}
mCutPath是在代碼(這個問題並不重要)別處創建一個Path對象。
這裏是儘快適配器視圖試圖得出一個孩子出現異常:
FATAL EXCEPTION: main
java.lang.UnsupportedOperationException
at android.view.GLES20Canvas.clipPath(GLES20Canvas.java:408)
at com.phunware.funimation.android.views.NinjaMenu.drawChild(NinjaMenu.java:529)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.draw(View.java:10986)
at android.view.View.getDisplayList(View.java:10422)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.getDisplayList(View.java:10420)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.draw(View.java:10986)
at android.widget.FrameLayout.draw(FrameLayout.java:450)
at android.view.View.getDisplayList(View.java:10422)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.getDisplayList(View.java:10420)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.getDisplayList(View.java:10420)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.getDisplayList(View.java:10420)
at android.view.ViewGroup.drawChild(ViewGroup.java:2850)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
at android.view.View.draw(View.java:10986)
at android.widget.FrameLayout.draw(FrameLayout.java:450)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2152)
at android.view.View.getDisplayList(View.java:10422)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:852)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:1910)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1634)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
不是完全禁用硬件加速其他,是有辦法檢查一個給定的畫布功能,支持硬件加速和如果它不關閉它?
Canvas.isHardwareAccelerated()不工作嗎? – DeeV