但是,某些用户正在使用以下堆栈跟踪来报告崩溃
java.lang.UnsupportedOperationExceptionat androID.vIEw.GLES20Canvas.clipPath(GLES20Canvas.java:413)at com.androID.camera.HighlightVIEw.draw(HighlightVIEw.java:101)at com.androID.camera.CropImageVIEw.onDraw(CropImage.java:783)at androID.vIEw.VIEw.draw(VIEw.java:11006)at androID.vIEw.VIEw.getdisplayList(VIEw.java:10445)at androID.vIEw.VIEwGroup.drawChild(VIEwGroup.java:2850)at androID.vIEw.VIEwGroup.dispatchDraw(VIEwGroup.java:2489)at androID.vIEw.VIEw.getdisplayList(VIEw.java:10443)at androID.vIEw.VIEwGroup.drawChild(VIEwGroup.java:2850)at androID.vIEw.VIEwGroup.dispatchDraw(VIEwGroup.java:2489)at androID.vIEw.VIEw.getdisplayList(VIEw.java:10443)at androID.vIEw.VIEwGroup.drawChild(VIEwGroup.java:2850)at androID.vIEw.VIEwGroup.dispatchDraw(VIEwGroup.java:2489)at androID.vIEw.VIEw.getdisplayList(VIEw.java:10443)at androID.vIEw.VIEwGroup.drawChild(VIEwGroup.java:2850)at androID.vIEw.VIEwGroup.dispatchDraw(VIEwGroup.java:2489)at androID.vIEw.VIEw.getdisplayList(VIEw.java:10443)at androID.vIEw.VIEwGroup.drawChild(VIEwGroup.java:2850)at androID.vIEw.VIEwGroup.dispatchDraw(VIEwGroup.java:2489)at androID.vIEw.VIEw.draw(VIEw.java:11009)at androID.Widget.FrameLayout.draw(FrameLayout.java:450)at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.draw(PhoneWindow.java:2154)at androID.vIEw.VIEw.getdisplayList(VIEw.java:10445)at androID.vIEw.HarDWareRenderer$glrenderer.draw(HarDWareRenderer.java:853)at androID.vIEw.VIEwRootImpl.draw(VIEwRootImpl.java:1961)at androID.vIEw.VIEwRootImpl.performTraversals(VIEwRootImpl.java:1679)at androID.vIEw.VIEwRootImpl.handleMessage(VIEwRootImpl.java:2558)at androID.os.Handler.dispatchMessage(Handler.java:99)at androID.os.Looper.loop(Looper.java:137)at androID.app.ActivityThread.main(ActivityThread.java:4697)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:787)at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:554)at dalvik.system.NativeStart.main(Native Method)
从搜索我认为这是由某些设备上的硬件加速引起的.我的清单中禁用了硬件加速,但异常仍然发生.我还发现“一个固定的解决方法是识别代码中的有问题的 *** 作,将它们绘制到位图,然后将位图打到加速的画布上.
根据堆栈跟踪的有问题的代码是
protected voID draw(Canvas canvas) { if (mHIDden) { return; } canvas.save(); Path path = new Path(); if (!hasFocus()) { mOutlinePaint.setcolor(0xFF000000); canvas.drawRect(mDrawRect,mOutlinePaint); } else { Rect vIEwDrawingRect = new Rect(); mContext.getDrawingRect(vIEwDrawingRect); if (mCircle) { float wIDth = mDrawRect.wIDth(); float height = mDrawRect.height(); path.addCircle(mDrawRect.left + (wIDth / 2),mDrawRect.top + (height / 2),wIDth / 2,Path.Direction.CW); mOutlinePaint.setcolor(0xFFEF04D6); } else { path.addRect(new RectF(mDrawRect),Path.Direction.CW); mOutlinePaint.setcolor(0xFFFF8A00); } canvas.clipPath(path,Region.Op.DIFFERENCE); canvas.drawRect(vIEwDrawingRect,hasFocus() ? mFocusPaint : mNoFocusPaint); canvas.restore(); canvas.drawPath(path,mOutlinePaint); if (mMode == ModifyMode.Grow) { if (mCircle) { int wIDth = mResizeDrawableDiagonal.getIntrinsicWIDth(); int height = mResizeDrawableDiagonal.getIntrinsicHeight(); int d = (int) Math.round(Math.cos(/*45deg*/Math.PI / 4D) * (mDrawRect.wIDth() / 2D)); int x = mDrawRect.left + (mDrawRect.wIDth() / 2) + d - wIDth / 2; int y = mDrawRect.top + (mDrawRect.height() / 2) - d - height / 2; mResizeDrawableDiagonal.setBounds(x,y,x + mResizeDrawableDiagonal.getIntrinsicWIDth(),y + mResizeDrawableDiagonal.getIntrinsicHeight()); mResizeDrawableDiagonal.draw(canvas); } else { int left = mDrawRect.left + 1; int right = mDrawRect.right + 1; int top = mDrawRect.top + 4; int bottom = mDrawRect.bottom + 3; int wIDthWIDth = mResizeDrawableWIDth.getIntrinsicWIDth() / 2; int wIDthHeight = mResizeDrawableWIDth.getIntrinsicHeight() / 2; int heightHeight = mResizeDrawableHeight.getIntrinsicHeight() / 2; int heightWIDth = mResizeDrawableHeight.getIntrinsicWIDth() / 2; int xMIDdle = mDrawRect.left + ((mDrawRect.right - mDrawRect.left) / 2); int yMIDdle = mDrawRect.top + ((mDrawRect.bottom - mDrawRect.top) / 2); mResizeDrawableWIDth.setBounds(left - wIDthWIDth,yMIDdle - wIDthHeight,left + wIDthWIDth,yMIDdle + wIDthHeight); mResizeDrawableWIDth.draw(canvas); mResizeDrawableWIDth.setBounds(right - wIDthWIDth,right + wIDthWIDth,yMIDdle + wIDthHeight); mResizeDrawableWIDth.draw(canvas); mResizeDrawableHeight.setBounds(xMIDdle - heightWIDth,top - heightHeight,xMIDdle + heightWIDth,top + heightHeight); mResizeDrawableHeight.draw(canvas); mResizeDrawableHeight.setBounds(xMIDdle - heightWIDth,bottom - heightHeight,bottom + heightHeight); mResizeDrawableHeight.draw(canvas); } } }}
我如何绘制一个位图然后blit到画布?
任何帮助将不胜感激!
解决方法 在ICS设备上,即使应用程序没有请求硬件加速,也有一个开发者选项.那就是造成崩溃的原因.您应该可以使用这样的东西来强制它使用软件渲染:if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB) { myCusomVIEw.setLayerType(VIEw.LAYER_TYPE_SOFTWARE,null);}总结
以上是内存溢出为你收集整理的Canvas.clipPath上的Android UnsupportedOperationException异常全部内容,希望文章能够帮你解决Canvas.clipPath上的Android UnsupportedOperationException异常所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)