Editing/Painting 在 Canvas 上查看结果 "immediately"
Editing/Painting on Canvas and see result "immediately"
我正在为 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();
}
有什么简单的方法可以让像素一显示就显示 "painted"?
我做了很多可能在存储库中看到的更改,但主要是我从 canvas:
上绘图切换了
_canvas = _holder.lockCanvas();
某事"easier" - 在位图上绘图。
然后我实现了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();
}
我正在为 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();
}
有什么简单的方法可以让像素一显示就显示 "painted"?
我做了很多可能在存储库中看到的更改,但主要是我从 canvas:
上绘图切换了_canvas = _holder.lockCanvas();
某事"easier" - 在位图上绘图。
然后我实现了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();
}