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(...){

我正在为Android编写分形生成器

代码可在以下位置获得:

但问题是:

@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上没有工作。但在所有情况下都阻止了一切——绝对不是正确的方式