Android 在画布上编辑/绘制并查看结果“;立即”;
我正在为Android编写分形生成器 代码可在以下位置获得: 但问题是:Android 在画布上编辑/绘制并查看结果“;立即”;,android,android-canvas,Android,Android Canvas,我正在为Android编写分形生成器 代码可在以下位置获得: 但问题是: @Override public void run() { if (!_holder.getSurface().isValid()) continue; _canvas = _holder.lockCanvas(); // generate fractal here, use this for write: while(...){
@Override
public void run() {
if (!_holder.getSurface().isValid())
continue;
_canvas = _holder.lockCanvas();
// generate fractal here, use this for write:
while(...){
int a = calcPixelColor();
_paint.setARGB(0xFF, a, a, a);
_canvas.drawPoint(x, y, _paint);
}
_holder.unlockCanvasAndPost(_canvas);
}
然而,如果我这样做,当所有分形生成时,整个画面就会显示出来。我试过这个,但结果很糟糕:
if (++__counter > 10000){
__counter = 0;
_holder.unlockCanvasAndPost(_canvas);
_canvas = _holder.lockCanvas();
}
有什么简单的方法可以在像素“绘制”后立即显示它们吗?我做了很多可能在存储库中看到的更改,但主要的是我从在画布上绘制切换到了:
_canvas = _holder.lockCanvas();
更容易的事情-在位图上绘制
然后我实现了onDraw(),如下所示:
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(_image, 0, 0, _paint2);
}
要不时显示,我执行了以下操作:
if (__counter++ > COUNTER_MAX){
__counter = 0;
this.postInvalidate();
}
最后,当生成分形的线程完成时,我又添加了一个invalidate
@Override
public void run() {
// generate fractal here
this.postInvalidate();
}
在哪里看到他们?画布会立即将每个像素绘制到任何支持存储。如果备份存储是SurfaceHolder之类的,您只需解锁并更频繁地发布(可能在计时器上,每个时间片绘制X个点)。在屏幕上显示。这就是我对第二个被剪掉的屏幕所做的,但是屏幕flickr和缺少的“行”应该在
onDraw()事件中执行所有绘图。可能我遗漏了什么,但如果我这样做,它会阻塞30-40秒,直到重新喷漆。尝试了类似的东西,在4.0和4.2上工作,但在4.4上没有工作。但在所有情况下都阻止了一切——绝对不是正确的方式