0

我有與ViewPager奇怪的錯誤 - 當我刷它慢慢它是一切都好,但當我這樣做的時候它崩潰。這一個導致崩潰(空指針異常):ViewPager快速滑動導致崩潰

Bitmap hotspots = Bitmap.createBitmap(img.getDrawingCache()); 

所有方法:

public int getHotspotColor(int hotspotId, int x, int y) { 
     ImageView img = (ImageView) itemView.findViewById(hotspotId); 
     img.setDrawingCacheEnabled(true); 
     //img.buildDrawingCache(); //update 
     Bitmap hotspots = Bitmap.createBitmap(img.getDrawingCache()); 
     img.setDrawingCacheEnabled(false); 

     return hotspots.getPixel(x, y); 
    } 

主要地,兩個或三個快節奏揮動後崩潰。它慢嗎?

的logcat:

12-18 18:50:21.831: E/InputEventReceiver(12924): Exception dispatching input event. 
12-18 18:50:21.832: E/MessageQueue-JNI(12924): Exception in MessageQueue callback: handleReceiveCallback 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): java.lang.NullPointerException 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.graphics.Bitmap.createBitmap(Bitmap.java:639) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at pl.dajsiezlapac.apka.ViewPagerAdapter.getHotspotColor(ViewPagerAdapter.java:156) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at pl.dajsiezlapac.apka.ViewPagerAdapter$1.onTouch(ViewPagerAdapter.java:78) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.View.dispatchTouchEvent(View.java:7731) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2212) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2240) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.app.Activity.dispatchTouchEvent(Activity.java:2466) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.View.dispatchPointerEvent(View.java:7916) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4023) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3902) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3452) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3471) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3479) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3452) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3471) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3479) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3452) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5657) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5588) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5559) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5737) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.os.MessageQueue.nativePollOnce(Native Method) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.os.MessageQueue.next(MessageQueue.java:138) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.os.Looper.loop(Looper.java:123) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at android.app.ActivityThread.main(ActivityThread.java:5086) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at java.lang.reflect.Method.invokeNative(Native Method) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at java.lang.reflect.Method.invoke(Method.java:515) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
12-18 18:50:21.846: E/MessageQueue-JNI(12924): at dalvik.system.NativeStart.main(Native Method) 
12-18 18:50:21.846: D/AndroidRuntime(12924): Shutting down VM 
12-18 18:50:21.848: W/dalvikvm(12924): threadid=1: thread exiting with uncaught exception (group=0x41704d40) 
12-18 18:50:21.856: E/AndroidRuntime(12924): FATAL EXCEPTION: main 
12-18 18:50:21.856: E/AndroidRuntime(12924): Process: pl.dajsiezlapac.apka, PID: 12924 
12-18 18:50:21.856: E/AndroidRuntime(12924): java.lang.NullPointerException 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.graphics.Bitmap.createBitmap(Bitmap.java:639) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at pl.dajsiezlapac.apka.ViewPagerAdapter.getHotspotColor(ViewPagerAdapter.java:156) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at pl.dajsiezlapac.apka.ViewPagerAdapter$1.onTouch(ViewPagerAdapter.java:78) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.View.dispatchTouchEvent(View.java:7731) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2212) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1945) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2240) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2218) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1917) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2068) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1515) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.app.Activity.dispatchTouchEvent(Activity.java:2466) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2016) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.View.dispatchPointerEvent(View.java:7916) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4023) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3902) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3452) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3471) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3578) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3479) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3635) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3452) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3502) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3471) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3479) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3452) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5657) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5588) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5559) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5737) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.os.MessageQueue.nativePollOnce(Native Method) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.os.MessageQueue.next(MessageQueue.java:138) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.os.Looper.loop(Looper.java:123) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at android.app.ActivityThread.main(ActivityThread.java:5086) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at java.lang.reflect.Method.invokeNative(Native Method) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at java.lang.reflect.Method.invoke(Method.java:515) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
12-18 18:50:21.856: E/AndroidRuntime(12924): at dalvik.system.NativeStart.main(Native Method) 
12-18 18:50:23.113: I/Process(12924): Sending signal. PID: 12924 SIG: 9 

片段,我用getHotspotId()方法:您的視圖

@Override 
    public Object instantiateItem(ViewGroup container, final int position) { 

     // Declare Variables 
     final ImageView imggun; 

     inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     itemView = inflater.inflate(R.layout.viewpager_item, container, 
       false); 
     FrameLayout layout = (FrameLayout) itemView.findViewById(R.id.fl1); 
     layout.setOnTouchListener(new View.OnTouchListener() { 

      public boolean onTouch(View v, MotionEvent ev) { 
       final int action = ev.getAction(); 
       final int evX = (int) ev.getX(); 
       final int evY = (int) ev.getY(); 
       switch (action) { 
       case MotionEvent.ACTION_DOWN: 

        int touchColor = getHotspotColor(R.id.buttons, evX, evY); 
        ColorTool ct = new ColorTool(); //line 83 
        int tolerance = 25; 
... 
} 
+0

添加錯誤日誌。它可以幫助。 –

+0

我已更新我的問題與日誌 –

+0

你還可以顯示你在哪裏以及如何稱呼你的方法? –

回答

1

應用程序崩潰,因爲它在MotionEvent.ACTION_DOWN事件中,每次將手指放在屏幕上時都會激活它。

另一方面,如果您將它放在MotionEvent.ACTION_UP部分中,如果您在屏幕上放下手指並輕掃,則不會注意到任何ACTION_UP,並且這是getHotspotId()應該在的位置。

所以,代碼是正確的 - 它的位置並不那麼完美。感謝所有的幫助!

0

繪製緩存還沒有準備好。您需要確保該視圖將繪製緩存,首先調用img.setDrawingCacheEnabled(true);然後調用您的線路。

+0

我已經將全部方法添加到上下文的問題中。它已經在那裏。 –