我有一个覆盖 ViewGroup 的类。这是我对 dispatchDraw 的实现:
@Override
protected void dispatchDraw(final Canvas canvas) {
super.dispatchDraw(canvas);
mViewBehind.drawShadow(mContent, canvas);
mViewBehind.drawFade(mContent, canvas, getPercentOpen());
mViewBehind.drawSelector(mContent, canvas, getPercentOpen());
}
但是,有时我会收到 StackOverflowError:
01-25 09:20:38.569: E/AndroidRuntime(15480): FATAL EXCEPTION: main
01-25 09:20:38.569: E/AndroidRuntime(15480): java.lang.StackOverflowError
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.text.BoringLayout.draw(BoringLayout.java:365)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.widget.TextView.onDraw(TextView.java:4225)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6880)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.widget.AbsListView.dispatchDraw(AbsListView.java:1586)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.widget.GridView.dispatchDraw(GridView.java:1948)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6986)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.widget.AbsListView.draw(AbsListView.java:2967)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6986)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.widget.FrameLayout.draw(FrameLayout.java:357)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.widget.ScrollView.draw(ScrollView.java:1423)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.widget.FrameLayout.draw(FrameLayout.java:357)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at com.ui.library.slidingmenu2.CustomViewAbove.dispatchDraw(CustomViewAbove.java:931)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at com.ui.library.slidingmenu2.CustomViewAbove.dispatchDraw(CustomViewAbove.java:931)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at com.ui.library.slidingmenu2.CustomViewAbove.dispatchDraw(CustomViewAbove.java:931)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.View.draw(View.java:6883)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.widget.FrameLayout.draw(FrameLayout.java:357)
01-25 09:20:38.569: E/AndroidRuntime(15480): at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1921)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.ViewRoot.draw(ViewRoot.java:1528)
01-25 09:20:38.569: E/AndroidRuntime(15480): at android.view.Vie
堆栈跟踪显示 com.ui.library.slidingmenu2.CustomViewAbove.dispatchDraw(CustomViewAbove.java:931)
(即 super.dispatchDraw(canvas)
)是被调用至少 4 次。
只有当我返回到某个包含 ViewPager 的 Activity 时才会发生异常,该 Activity 的第一个 Fragment 包含 GridView,而且只有几次。
(顺便说一句,什么是 BoringLayout
?)
最佳答案
一定是层数太多,尽量减少你的布局层数。
关于android - ViewGroup 在 dispatchDraw 时导致 StackOverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14517997/