3

結果がデバイス密度に依存しないように、(キャンバスを使用して)ビットマップに描画する方法がわかりません。

描画を行うコードは次のとおりです。

ImageView iv = (ImageView)findViewById(R.id.container);
Bitmap result = BitmapFactory.decodeResource(getResources(), R.drawable.big_picture).copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(result);
canvas.drawBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.small_picture), actualX, actualY, null);
iv.setImageBitmap(result);

に big_picture をロードBitmap resultし、指定された位置に small_picture を描画したいと考えています。actualX と actualY を設定すると、同じ密度のデバイスで問題ありません。ただし、異なる密度のデバイスはキャンバスを「スケーリング」します。

興味深いのは、small_picture だけが「スケーリング」されて画面の外に出ますが、その背後にある pig_picture は、どの密度の画面でも画面にうまく収まることです。何故ですか?big_picture 密度に small_picture を個別に描画するにはどうすればよいですか? ありがとうございました!

4

1 に答える 1

2

をデバッグした後、何が起こっているのかがわかりましたBitmap。画像を画像に追加しない限りdrawable-nodpi、公称デバイス密度に一致するようにサイズが変更されます。(120、160、240、320)画像をに「ロード」すると、元の画像に関係なく、これらの密度のいずれかになりますBitmapCanvas

したがって、1つの解決策は、画像をに配置することdrawable-nodpiです。その後、それらはすべての密度で同じように動作します。

別の解決策は、上記の密度の比率に基づいて座標を乗算することです。

...または、すべての修飾子のカスタム画像と座標を作成することもできます。

于 2012-05-20T22:34:34.673 に答える