huburt-Hu / NewbieGuide

Android 快速实现新手引导层的库,通过简洁链式调用,一行代码实现引导层的显示
Apache License 2.0
3.56k stars 519 forks source link

蒙层消失的时候有crash #168

Open zhuangzhitu opened 4 years ago

zhuangzhitu commented 4 years ago

堆栈:0 java.lang.IndexOutOfBoundsException 1 at android.view.ViewGroup.removeFromArray(ViewGroup.java:5316) 2 at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5504) 3 at android.view.ViewGroup.removeViewInternal(ViewGroup.java:5466) 4 at android.view.ViewGroup.removeView(ViewGroup.java:5397) 5 at com.app.hubert.guide.core.GuideLayout.dismiss(GuideLayout.java:253) 6 at com.app.hubert.guide.core.GuideLayout.remove(GuideLayout.java:247) 7 at com.app.hubert.guide.core.GuideLayout$1.onClick(GuideLayout.java:89) 8 at android.view.View.performClick(View.java:7192) 9 at com.app.hubert.guide.core.GuideLayout.performClick(GuideLayout.java:97) 10 at com.app.hubert.guide.core.GuideLayout.onTouchEvent(GuideLayout.java:123) 11 at android.view.View.dispatchTouchEvent(View.java:13503) 12 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3067) 13 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2752) 14 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073) 15 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2766) 16 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073) 17 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2766) 18 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073) 19 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2766) 20 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073) 21 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2766) 22 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3073) 23 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2766) 24 at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:613) 25 at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1933) 26 at android.app.Activity.dispatchTouchEvent(Activity.java:4147) 27 at com.mubu.app.facade.common.BaseActivity.dispatchTouchEvent(BaseActivity.java:280)

猜测原因是:GuideLayout # performClick 这里会不会跟super.onTouchEvent(event)冲突呀? setOnClickListener存在到达两次,两次remove自己就挂了啊。
case MotionEvent.ACTION_CANCEL: float upX = event.getX(); float upY = event.getY(); if (Math.abs(upX - downX) < touchSlop && Math.abs(upY - downY) < touchSlop) { List highLights = guidePage.getHighLights(); for (HighLight highLight : highLights) { RectF rectF = highLight.getRectF((ViewGroup) getParent()); if (rectF.contains(upX, upY)) { notifyClickListener(highLight); return true; } } //performClick(); } break;

zhuangzhitu commented 4 years ago

注释掉performClick()可以解决问题。

zhuangzhitu commented 4 years ago

fix : https://github.com/huburt-Hu/NewbieGuide/pull/169/commits