1

最後のセットの上に新しいグラフィックを描画できる必要があるアプリを作成しています。

これは私の現在のonDraw()メソッドです-

protected void onDraw(Canvas canvas) {

    canvas.drawColor(Color.WHITE);

    if(points.size() > 0) {
        //do some stuff here - this is all working ok
        canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
    }   
}

基本的に、新しいグラフィックを最後のグラフィックの上にレイヤーとして描画する必要があるので、私が探しているのは、最後のキャンバスのイメージを現在に運ぶ方法です。

私はcanvas.setBitmap()メソッドを使用して自分でそれを理解しようとしましたが、それは非常に面白い動作をします。

助けていただければ幸いです:)

PS必要に応じて、クラスを拡張SurfaceViewして実装しますSurfaceHolder.Callback

編集:これは私がonDraw()メソッドで試したものですが、強制的に閉じるだけです

if(bitmap != null) {
        canvas.drawBitmap(bitmap, 0, 0, paint);
        canvas.setBitmap(bitmap);  
    }
4

2 に答える 2

4

自分で答えを見つけました:)

@Override
protected void onDraw(Canvas c) {

if(bitmap != null && canvas != null) { 
    canvas.drawLine(p1.x, p1.y, p2.x, p2.y, linePaint);
    c.drawBitmap(bitmap, 0, 0, linePaint);  
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
canvas = new Canvas(bitmap);
canvas.drawColor(Color.WHITE);
}

意図したとおりに機能し、古いキャンバスの上に描画する効果を継続的に作成します

于 2010-10-29T16:09:24.677 に答える
0

前の画像を永続的にArrayListに保存する必要があります。描画中に、ArrayListをループして、すべてのアイテムを再描画します。

このようなもの:

for (Graphic graphic : _graphics) {
    bitmap = graphic.getBitmap();
    coords = graphic.getCoordinates();
    canvas.drawBitmap(bitmap, coords.getX(), coords.getY(), null);
}
于 2010-10-28T03:29:01.373 に答える