我正在实现我的自定义视图,我在其中覆盖onDraw()
方法以绘制一些对象集。
应该将对象放置在以特定方式评估的坐标中。放置这些对象的代码工作不正确(其中一些或者根本没有绘制或者被其他对象覆盖)所以我需要做一些调试来逐行执行它并观察实际绘制的对象是什么 - 步骤。
但据我所知,在完成所有绘图后,屏幕上会显示实际图片,因为当我执行canvas.drawBitmap
行时,我的模拟器屏幕上没有出现任何内容。
我的问题是:调试onDraw()
代码的最佳(或可能是唯一的)方法是什么?我在Adroid开发门户网站上做了一些研究,在这里发布了一些问题,但无法找到解决方案。
答案 0 :(得分:4)
没试过,但它应该让你走上正轨:
请勿将其保留在生产代码中
@Override
public void onDraw(Canvas canvas) {
Bitmap screenBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
Canvas screenCanvas = new Canvas(screenBitmap);
/* Run draw calls on screenCanvas, inspect screenBitmap for result*/
}
答案 1 :(得分:1)
我不是专家,但我知道现在Android中的图形加速非常复杂:绘图命令会记录在绘图列表中,然后对绘图列表进行优化并处理以便绘制GPU。而且,从Android 5.0开始,需要在CPU中处理的部分绘图可以(总是?)在后台线程中运行。有关一般背景,请参阅https://source.android.com/devices/graphics/。
然后,关于工具,我建议使用systrace
。有关如何使用它和更多工具的更多信息和详细示例,请参阅Romain Guy“Android Performance Case Study”和后续“Android Performance Case Study Follow-up”的优秀(尽管可能有点过时)文章。
另请参阅Android文档“Perfect GPU Use”。
希望这能让你走上正确的道路。这是一个非常复杂的主题。
答案 2 :(得分:1)
您可以尝试评论可疑陈述。
另一种选择是使用计时器 - 经常使来自不同线程的视图无效,而onDraw
内部仅在经过一段时间后运行不同的语句。对不同的语句使用不同的时间,使其看起来像动画。