Canvas.clipPath上的Android UnsupportedOperationException异常

Canvas.clipPath上的Android UnsupportedOperationException异常,第1张

概述我正在使用我的项目中的 https://github.com/lvillani/android-cropimage的图像裁剪库来裁剪存储在设备上的图像. 但是,某些用户正在使用以下堆栈跟踪来报告崩溃 java.lang.UnsupportedOperationExceptionat android.view.GLES20Canvas.clipPath(GLES20Canvas.java:413) 我正在使用我的项目中的 https://github.com/lvillani/android-cropimage的图像裁剪库来裁剪存储在设备上的图像.

但是,某些用户正在使用以下堆栈跟踪来报告崩溃

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异常所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1132410.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存