我正在为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();
}
任何简单的方法如何尽快显示像素"画"?
答案 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();
}