我有一个手动绘制的自定义视图。我正在将东西绘制到位图中,然后在 onDraw() 中使用该位图。我意识到如果启用绘图缓存,我可以使用该缓存而不是创建自己的位图。这主要是有效的。
目前我的 onDraw 方法如下所示:
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(getDrawingCache(), 0, 0, null);
}
这适用于我尝试过的模拟器。但是,我收到有关 StackOverflowError 的崩溃报告。报告如下所示:
java.lang.StackOverflowError
at android.view.View.getDrawingCache(View.java:10481)
at android.view.View.getDrawingCache(View.java:10446)
at com.aragaer.jtt.JTTClockView.onDraw(JTTClockView.java:162)
at android.view.View.draw(View.java:10983)
at android.view.View.buildDrawingCache(View.java:10700)
at android.view.View.getDrawingCache(View.java:10481)
at android.view.View.getDrawingCache(View.java:10446)
and so on...
我查看了 android 源代码,实际上 buildDrawingCache 调用了 draw()。这将解释循环。但是 buildDrawingCache() 应该在第二次调用时立即返回。
除非设置了 PFLAG_DRAWING_CACHE_VALID ( source ),否则这不会发生。并且仅当视图附加到父级时才设置该标志,是硬件加速并且层类型是 LAYER_TYPE_NONE (再次来源)。
问题是 - 是否可以将图层类型显式设置为非无,或者我应该使用其他方法?如果是,我应该选择哪种类型?