我想从MainActivity
. (用户)项目的 Github 链接在文章末尾给出。
MainActivity
draw(Drawing)
在 SurfaceView 实例上调用方法。
我有以下代码,只有在启用断点调试时才会绘制表面视图。
我已经访问了这些链接,没有找到解决方案:
我遵循的教程:
Android 编码 - 在 SurfaceView 上绘图
我认为这是一个视图创建过程中的问题,所以我添加了创建检查:
public void draw(Drawing drawing) {
this.drawing = drawing;
if (surfaceHolder.isCreating()) {
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread = new Thread(LushSurfaceView.this);
thread.start();
}
});
} else {
thread = new Thread(this);
thread.start();
}
}
这是线程:
@Override
public void run() {
if (drawing != null) {
switch (drawing) {
case RECT:
drawRectShape();
break;
}
}
}
我还故意添加了延迟以等待表面视图初始化。
private void drawRectShape() {
if (surfaceHolder.getSurface().isValid()) {
Canvas canvas = surfaceHolder.lockCanvas();
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (canvas != null && !surfaceHolder.isCreating()) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(30);
Random random = new Random();
int w = canvas.getWidth();
int h = canvas.getHeight();
int left = Math.round(w/2);
int top = Math.round(h/2);
int right = 200;
int bottom =200;
int r = random.nextInt(255);
int g = random.nextInt(255);
int b = random.nextInt(255);
paint.setColor(0xff000000 + (r << 16) + (g << 8) + b);
canvas.drawRect(new Rect(left, top, right, bottom), paint);
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
- 代码在以下情况下工作:我启用断点调试。
- 简单的调试不显示任何绘制。
- 我多次重新创建了这个场景。
我使用 Nexus 6 (OS 7.1.1) 作为测试设备。(不是模拟器)。
github 上的项目源。