通过简单的按钮点击,我的应用程序收到了一些错误消息。点击动画应该开始,但按钮变大。它在大多数设备上运行完美,但在某些设备上(我认为大多数是4.X及以上)它会崩溃。
异常消息(堆栈跟踪):
java.lang.NullPointerException
at android.view.GLES20RecordingCanvas.drawBitmap(GLES20RecordingCanvas.java:118)
at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:400)
at android.view.View.draw(View.java:10999)
at android.view.ViewGroup.drawChild(ViewGroup.java:3186)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788)
at android.view.ViewGroup.drawChild(ViewGroup.java:3184)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788)
at android.view.ViewGroup.drawChild(ViewGroup.java:3184)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788)
at android.view.ViewGroup.drawChild(ViewGroup.java:3184)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2788)
at android.view.View.draw(View.java:11017)
at android.view.View.getDisplayList(View.java:10444)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2896)
at android.view.View.getDisplayList(View.java:10407)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2896)
at android.view.View.getDisplayList(View.java:10407)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2896)
at android.view.View.getDisplayList(View.java:10407)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:883)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2089)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1781)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2666)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:4977)
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)
提前致谢!
答案 0 :(得分:2)
过去几天我一直在寻找答案。它在ICS中有记录,但我在我的一款测试手机中注意到它运行4.1.2的三星Galaxy S3。大多数人建议关闭硬件加速;我不想这样做因为硬件加速使我的动画如此柔滑。所以我发现如果我覆盖draw()尝试并捕获空指针异常,硬件加速功能工作(大部分时间)并且足以让你永远不会注意到它们没有工作或抛出异常。
@Override
public void draw(Canvas canvas) {
try{
super.draw(canvas);
}catch(java.lang.NullPointerException e){
//you can log if you want to you can leave your friends behind
//Log.e("mytag","MyCustomView::draw():"+e);
}
}
答案 1 :(得分:0)
我已经看到了同样的错误,这很奇怪,但只发生在非常具体的情况下。
我会在这里描述它以防万一。
在我打开硬件加速功能的ICS设备上运行缩放动画时,在视图上显示0%(基本缩小到屏幕中间)。
我想我会为该视图禁用硬件加速并继续前进,因此我的应用程序的其余部分将顺利运行。
希望这有帮助。