2

現在、キャンバスに画像を追加し、そのキャンバスを相対的なレイアウトに追加するプログラムを作成しています。私が抱えている問題は、これを呼び出すとレイアウトが表示されますが、キャンバスがレイアウトに描画されないことです。

canvas = (RelativeLayout) findViewById(R.id.canvasLayout);                  
imageCanvas = new Canvas();
mainImage = BitmapFactory.decodeResource(getResources(), R.drawable.image);

imageCanvas.drawBitmap(mainImage, 50, 50, null);

imageCanvas.drawColor(Color.BLACK);
canvas.draw(imageCanvas);

これは、イメージをキャンバスに追加してから、キャンバスをレイアウトに追加しようとするコードです。

これを修正するために何をすべきかについて、私は完全に迷っています。

4

3 に答える 3

4

使用しているcanvas.draw(imageCanvas)呼び出しは、実際にキャンバス(RelativeLayout)をimageCanvas(Canvasオブジェクト)に描画します-おそらく意図したものではありません。ドローアブルをRelativeLayoutに配置する方法をいくつか提案します。

1つ目は、ImageViewを作成し、その画像をドローアブルに設定してから、レイアウトに追加することです。実行時に画像を動的に追加するかどうかに応じて、実際にはxmlグラフィックデザイナーでこれを行うことができます。これは、画像の大きさ、および画像の拡大縮小/トリミング方法を制御できるため、おそらく最善の方法です。

レイアウトに背景を設定したい場合は、RelativeLayoutのBackground属性を直接ドローアブルに設定できると思いますが、これでは画像の拡大縮小をあまり制御できません。

最後に、RelativeLayoutの描画方法を完全に制御するために、任意のビューでOnDrawメソッドをオーバーライドできます。このメソッドは、ビューを更新する必要があるときはいつでもAndroidシステムによって呼び出されます。これを使用することになった場合は、RelativeLayoutに配置するカスタムビュークラスを作成すると、おそらくより適切に機能します。

于 2012-08-17T12:08:52.190 に答える
2
canvas = (RelativeLayout) findViewById(R.id.canvasLayout);                  
imageCanvas = new Canvas();

mainImage = BitmapFactory.decodeResource(getResources(), R.drawable.image);

imageCanvas.drawBitmap(mainImage, 50, 50, null);



canvas.addView(imageCanvas);
于 2012-08-24T13:53:34.710 に答える
1

以下は、プログラムで、やりたいことのように聞こえるビットマップリソースからレイアウトに画像を追加します。たとえば、その画像の上に描画する必要がある場合は、ImageViewを拡張し、onDraw()をオーバーライドして、カスタムコンポーネントを作成する必要があります。

canvas = (RelativeLayout) findViewById(R.id.canvasLayout);                  
imageView = new ImageView(getApplicationContext());
mainImage = BitmapFactory.decodeResource(getResources(), R.drawable.image);
imageView.setImageBitmap( mainImage );
canvas.addView( imageView );
于 2012-08-17T12:06:40.317 に答える