java.lang.IllegalArgumentException: nativePtr 为空
java.lang.IllegalArgumentException: nativePtr is null
我尝试从自定义视图制作自己的进度条。大多数设备,包括 android 工作室模拟都可以正常工作。但是有些设备没有,例如诺基亚 8。这是 logcat:
FATAL EXCEPTION: main
Process: com.example.example, PID: 32287
java.lang.IllegalArgumentException: nativePtr is null
at
libcore.util.NativeAllocationRegistry.registerNativeAllocation(NativeAllocationRegistry.java:118)
at android.graphics.Shader.getNativeInstance(Shader.java:162)
at android.graphics.Paint.getNativeInstance(Paint.java:591)
at android.graphics.BaseCanvas.drawRoundRect(BaseCanvas.java:362)
at android.graphics.Canvas.drawRoundRect(Canvas.java:1793)
at android.graphics.BaseCanvas.drawRoundRect(BaseCanvas.java:367)
at android.graphics.Canvas.drawRoundRect(Canvas.java:1780)
at com.example.example.views.MyProgressBar.onDraw(MyProgressBar.java:111)
第 111 行是
canvas.drawRoundRect(rectProgress, radius, radius, paintProgress);
rectProgress 和 paintProgress 声明如下
rectProgress = new RectF();
paintProgress = new Paint();
shader = new LinearGradient(left, top, right, top, new int[]{startColor, endColor}, null, Shader.TileMode.CLAMP);
paintProgress.setShader(shader);
问题出在哪里?我试图四处搜索但无济于事。
我找到线索了。在弄乱了 Shader 构造函数之后,我发现在绘制对象 setShader() 时空参数 Shader 的空初始化会导致错误。
shader = new Shader();
paintProgress.setShader(shader)
canvas.drawRoundRect(rectProgress, radius, radius, paintProgress);
在我创建新的 LinearGradient 着色器之前实际上有一个 if 条件,我没有包含在问题中。当条件失败时,绘制对象会导致崩溃。
我尝试从自定义视图制作自己的进度条。大多数设备,包括 android 工作室模拟都可以正常工作。但是有些设备没有,例如诺基亚 8。这是 logcat:
FATAL EXCEPTION: main Process: com.example.example, PID: 32287 java.lang.IllegalArgumentException: nativePtr is null at libcore.util.NativeAllocationRegistry.registerNativeAllocation(NativeAllocationRegistry.java:118) at android.graphics.Shader.getNativeInstance(Shader.java:162) at android.graphics.Paint.getNativeInstance(Paint.java:591) at android.graphics.BaseCanvas.drawRoundRect(BaseCanvas.java:362) at android.graphics.Canvas.drawRoundRect(Canvas.java:1793) at android.graphics.BaseCanvas.drawRoundRect(BaseCanvas.java:367) at android.graphics.Canvas.drawRoundRect(Canvas.java:1780) at com.example.example.views.MyProgressBar.onDraw(MyProgressBar.java:111)
第 111 行是
canvas.drawRoundRect(rectProgress, radius, radius, paintProgress);
rectProgress 和 paintProgress 声明如下
rectProgress = new RectF();
paintProgress = new Paint();
shader = new LinearGradient(left, top, right, top, new int[]{startColor, endColor}, null, Shader.TileMode.CLAMP);
paintProgress.setShader(shader);
问题出在哪里?我试图四处搜索但无济于事。
我找到线索了。在弄乱了 Shader 构造函数之后,我发现在绘制对象 setShader() 时空参数 Shader 的空初始化会导致错误。
shader = new Shader();
paintProgress.setShader(shader)
canvas.drawRoundRect(rectProgress, radius, radius, paintProgress);
在我创建新的 LinearGradient 着色器之前实际上有一个 if 条件,我没有包含在问题中。当条件失败时,绘制对象会导致崩溃。