打开Hardwareacceleration的NullPointerException?

5w4*_*ley 11 java android nullpointerexception

我通过简单的按钮点击我的应用程序收到一些错误消息.点击动画应该开始,但按钮变大.它在大多数设备上运行完美,但在某些设备上(我认为大多数是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)
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Aar*_*ord 2

过去几天我一直在寻找这个问题的答案。它\xe2\x80\x99s记录在ICS中,但我在我的一部测试手机(运行4.1.2的三星Galaxy S3)中注意到了它。大多数人建议关闭硬件加速;我不想这样做,因为硬件加速使我的动画如此流畅。所以我发现,如果我重写draw()尝试并捕获空指针异常,硬件加速功能可以工作(大多数时候)并且足以让您永远不会注意到它们不工作或抛出异常。

\n\n
@Override\npublic void draw(Canvas canvas) {\n    try{\n        super.draw(canvas);\n    }catch(java.lang.NullPointerException e){\n        //you can log if you want to you can leave your friends behind\n        //Log.e("mytag","MyCustomView::draw():"+e);\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n