在画布上编辑/绘画并立即查看结果""

时间:2015-05-08 21:24:43

标签: android android-canvas

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

此处提供代码:

https://github.com/nmmmnu/MandelDroid

但问题部分是:

@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();
    }

任何简单的方法如何尽快显示像素"画"?

1 个答案:

答案 0 :(得分:0)

我做了许多可能在存储库中看到的更改,但主要的是我从画布上的绘图切换:

_canvas = _holder.lockCanvas();

做某事"更容易" - 绘制位图。

然后我实现了onDraw(),如下所示:

protected void onDraw(Canvas canvas) {
       canvas.drawBitmap(_image, 0, 0, _paint2);
}

我不时展示:

    if (__counter++ > COUNTER_MAX){
        __counter = 0;

        this.postInvalidate();
    }

最后,当生成分形的线程完成时,我又添加了一个无效

@Override
public void run() {
    // generate fractal here

    this.postInvalidate();
}