0

キャンバスにビットマップを表示しようとしています(または、ビットマップからキャンバスを作成します。これらは2つの異なるもののように見えますか?)。昨日ここで得た非常に役立つアドバイスのおかげで、これに対する最善のアプローチは、最初に独自のカスタムビューを作成してから、その中に必要なすべての機能を実装することであるように思われました。画像のパン/ピンチズーム/クリックなどの非常に単純な機能のみが必要なため、このためにsurfaceViewを拡張する必要はないことが提案されました。そのため、Viewを拡張しています。

このコードの問題は、実行する前であっても、Eclipseでこのビューのグラフィックレイアウトをクリックすると、StackOverflowErrorが発生することです。これは、回線this.draw(canvas);が再帰的に呼び出されているためか、何かが原因であると推測できます。その行をコメントアウトし、その上の行のコメントを外すとcanvas.drawBitmap(bmp, 0, 0, paint);、画像はグラフィックレイアウトで完全に表示されますが、アプリを実行すると、強制終了します。

public class CanvasView extends View {

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.testmapbmp);
Paint paint = new Paint();
Canvas c = new Canvas(bmp);

public CanvasView(Context context, AttributeSet attrs) {
    super(context, attrs);
} 

@Override
protected void onDraw(Canvas canvas) {
    //super.onDraw(canvas); 
    //canvas.drawBitmap(bmp, 0, 0, paint);
    this.draw(canvas); 
    //canvas.save();
}

なぜこれが起こっているのか誰かが私に説明できますか?これは、私が以前に投稿した質問へのリンクです。これは、私が達成しようとしていることに光を当てるのに役立つ場合に備えて、SurfaceviewのCanvasにビットマップを表示する

ありとあらゆる提案に感謝します!!

4

2 に答える 2

1

this.draw(canvas)を呼び出しますonDraw()

于 2013-03-26T13:29:36.037 に答える
0

このコードは、最終的にonDraw()を再帰的に呼び出すため、スタックメモリが消費されます。

于 2013-03-26T13:37:38.023 に答える