Android 渲染时发生异常

Android 渲染时发生异常,android,colors,android-view,android-custom-view,linear-gradients,Android,Colors,Android View,Android Custom View,Linear Gradients,在Android Studio中,我有一个自定义视图,使用LinearGradient private LinearGradient gradient = new LinearGradient(0, getHeight() / 2, getWidth(), getHeight() / 2, Color.BLUE, Color.rgb(255, 255, 0), Shader.TileMode.MIRROR); protected void onDraw(Canvas canvas) {

在Android Studio中,我有一个自定义视图,使用LinearGradient

private LinearGradient gradient = new LinearGradient(0, getHeight() / 2, getWidth(), 
getHeight() / 2, Color.BLUE, Color.rgb(255, 255, 0), Shader.TileMode.MIRROR);

protected void onDraw(Canvas canvas) {
   int halfWidth = this.getMeasuredWidth() / 2;
   int halfHeight = this.getMeasuredHeight() / 2;
   int radius = halfWidth > halfHeight ? halfHeight - 10 : halfWidth - 10;
   circlePaint.setAntiAlias(true);
   circlePaint.setShader(gradient);
   canvas.drawCircle(halfWidth, halfHeight, radius, circlePaint);
}
这是我尝试在GUI设计器中渲染时得到的堆栈跟踪:

Rendering Problems
Exception raised during rendering:
java.lang.ArrayIndexOutOfBoundsException: -2147483648
    at android.graphics.Gradient_Delegate$GradientPaint.getGradientColor(Gradient_Delegate.java:189)
    at android.graphics.LinearGradient_Delegate$LinearGradientPaint.getColor(LinearGradient_Delegate.java:221)
    at android.graphics.LinearGradient_Delegate$LinearGradientPaint.access$100(LinearGradient_Delegate.java:101)
    at android.graphics.LinearGradient_Delegate$LinearGradientPaint$LinearGradientPaintContext.getRaster(LinearGradient_Delegate.java:195)
    at sun.java2d.pipe.AlphaPaintPipe.renderPathTile(AlphaPaintPipe.java:124)
    at sun.java2d.pipe.AAShapePipe.renderTiles(AAShapePipe.java:201)
    at sun.java2d.pipe.AAShapePipe.renderPath(AAShapePipe.java:159)
    at sun.java2d.pipe.AAShapePipe.fill(AAShapePipe.java:68)
    at sun.java2d.pipe.PixelToShapeConverter.fillOval(PixelToShapeConverter.java:84)
    at sun.java2d.pipe.ValidatePipe.fillOval(ValidatePipe.java:108)
    at sun.java2d.SunGraphics2D.fillOval(SunGraphics2D.java:2268)
    at android.graphics.Canvas_Delegate$5.draw(Canvas_Delegate.java:705)
    at com.android.layoutlib.bridge.impl.GcSnapshot.drawInLayer(GcSnapshot.java:613)
    at com.android.layoutlib.bridge.impl.GcSnapshot.draw(GcSnapshot.java:583)
    at android.graphics.Canvas_Delegate.draw(Canvas_Delegate.java:1117)
    at android.graphics.Canvas_Delegate.native_drawOval(Canvas_Delegate.java:696)
    at android.graphics.Canvas_Delegate.native_drawCircle(Canvas_Delegate.java:722)
    at android.graphics.Canvas.native_drawCircle(Canvas.java)
    at android.graphics.Canvas.drawCircle(Canvas.java:1041)
    at MY.APPLICATION.HELP.CUSTOMVIEW.onDraw(CUSTOMVIEW.java:40) <-- HERE
    at android.view.View.draw(View.java:14839)
    at android.view.View.draw(View.java:14741)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3234)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3037)
    at android.view.View.draw(View.java:14739)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3234)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3037)
    at android.view.View.draw(View.java:14739)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3234)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3037)
    at android.view.View.draw(View.java:14739)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3234)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3037)
    at android.view.View.draw(View.java:14739)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3234)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3037)
    at android.view.View.draw(View.java:14842)
    at android.view.View.draw(View.java:14741)
    at android.view.ViewGroup.drawChild(ViewGroup.java:3234)
    at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3037)
    at android.view.View.draw(View.java:14842)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.render(RenderSessionImpl.java:582)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:331)
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:332)
    at com.android.tools.idea.rendering.RenderService$3.compute(RenderService.java:575)
    at com.android.tools.idea.rendering.RenderService$3.compute(RenderService.java:564)
    at com.intellij.openapi.application.impl.ApplicationImpl.runReadAction(ApplicationImpl.java:932)
    at com.android.tools.idea.rendering.RenderService.createRenderSession(RenderService.java:564)
    at com.android.tools.idea.rendering.RenderService.render(RenderService.java:691)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.doRender(AndroidLayoutPreviewToolWindowManager.java:586)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager.access$1900(AndroidLayoutPreviewToolWindowManager.java:80)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$6$1.run(AndroidLayoutPreviewToolWindowManager.java:528)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl$2.run(ProgressManagerImpl.java:178)
    at com.intellij.openapi.progress.ProgressManager.executeProcessUnderProgress(ProgressManager.java:209)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:212)
    at com.intellij.openapi.progress.impl.ProgressManagerImpl.runProcess(ProgressManagerImpl.java:171)
    at org.jetbrains.android.uipreview.AndroidLayoutPreviewToolWindowManager$6.run(AndroidLayoutPreviewToolWindowManager.java:523)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:320)
    at com.intellij.util.ui.update.MergingUpdateQueue.execute(MergingUpdateQueue.java:310)
    at com.intellij.util.ui.update.MergingUpdateQueue$2.run(MergingUpdateQueue.java:254)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:269)
    at com.intellij.util.ui.update.MergingUpdateQueue.flush(MergingUpdateQueue.java:227)
    at com.intellij.util.ui.update.MergingUpdateQueue.run(MergingUpdateQueue.java:217)
    at com.intellij.util.concurrency.QueueProcessor.runSafely(QueueProcessor.java:238)
    at com.intellij.util.Alarm$Request$1.run(Alarm.java:327)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
渲染问题
渲染期间引发的异常:
java.lang.ArrayIndexOutOfBoundsException:-2147483648
在android.graphics.Gradient_Delegate$GradientPaint.getGradientColor(Gradient_Delegate.java:189)中
在android.graphics.LinearGradient\u Delegate$LinearGradientPaint.getColor(LinearGradient\u Delegate.java:221)
在android.graphics.LinearGradient\u Delegate$LinearGradientPaint.access$100(LinearGradient\u Delegate.java:101)
在android.graphics.LinearGradient_Delegate$LinearGradientPaint$LinearGradientPaintContext.getRaster(LinearGradient_Delegate.java:195)
位于sun.java2d.pipe.AlphaPaintPipe.renderpathile(AlphaPaintPipe.java:124)
位于sun.java2d.pipe.aashapepie.renderTiles(aashapepie.java:201)
位于sun.java2d.pipe.aashapepie.renderPath(aashapepie.java:159)
位于sun.java2d.pipe.aashapepie.fill(aashapepie.java:68)
位于sun.java2d.pipe.PixelToShapeConverter.fillOval(PixelToShapeConverter.java:84)
位于sun.java2d.pipe.validatePie.Fillova(validatePie.java:108)
位于sun.java2d.SunGraphics2D.fillOval(SunGraphics2D.java:2268)
在android.graphics.Canvas_Delegate$5.draw(Canvas_Delegate.java:705)
位于com.android.layoutlib.bridge.impl.GcSnapshot.drawInLayer(GcSnapshot.java:613)
位于com.android.layoutlib.bridge.impl.GcSnapshot.draw(GcSnapshot.java:583)
在android.graphics.Canvas_Delegate.draw(Canvas_Delegate.java:1117)
位于android.graphics.Canvas\u Delegate.native\u drawOval(Canvas\u Delegate.java:696)
位于android.graphics.Canvas\u Delegate.native\u drawCircle(Canvas\u Delegate.java:722)
在android.graphics.Canvas.native_drawCircle(Canvas.java)上
位于android.graphics.Canvas.drawCircle(Canvas.java:1041)

在MY.APPLICATION.HELP.CUSTOMVIEW.onDraw(CUSTOMVIEW.java:40)中,如果在onCreate期间调用getHeight和getWidth,函数将返回零。也许这就是问题的原因。

谢谢,但不是-错误在线性半径中,所以它与颜色有关。你解决了这个问题吗?