半静的(めったに変更されない)ビットマップを作成する非ビューアイコンを受け入れるカスタムビュー(ディスプレイ)を作成しました。アイデアは、キャンバスに印刷するためにディスプレイにいくつかのアイコンを渡すことです。私の問題は、ディスプレイにアイコンビットマップを実際にキャンバスに描画させることができないことです。
以下のコードは、私が持っているものの実用的な例です。(動作するということは、正しく実行されることを意味します。私が望むものを印刷するということではありません)
public class AndroidTestoActivity extends Activity {
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout fl = new FrameLayout(this);
Display tv = new Display(this);
tv.setLayoutParams(new LayoutParams(200, 200));
fl.addView(tv);
setContentView(fl);
}
public class Display extends View {
Paint vPaint = new Paint();
Icon item = new Icon();
public Display(Context context) {
super(context);
vPaint.setStyle(Paint.Style.FILL_AND_STROKE);
vPaint.setColor(0x0ff000000);
setBackgroundColor(0xffffffff);
}
@Override public void onDraw(Canvas canvas) {
canvas.scale(200, 200);
item.onDraw(canvas);
canvas.drawLine(0.0f, 0.0f, 1.0f, 1.0f, vPaint);
}
}
public class Icon {
Bitmap myImage;
Paint mPaint = new Paint();
public Icon() {
myImage = Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888);
mPaint.setStyle(Style.FILL);
mPaint.setColor(0xffff0000);
Canvas c = new Canvas(myImage);
c.scale(50, 50);
c.drawCircle(0.5f, 0.5f, 0.5f, mPaint);
}
public void onDraw(Canvas canvas) {
canvas.drawBitmap(myImage, 0, 0, null);
}
}
}
このコードは、左上から右下に線を印刷し、0,0から50、50まで直径50pxの円を描く必要があります。代わりに、私が得るのは線だけです。ただし、ビットマップをファイルに印刷すると、ファイルは正確に出力されます。
何が起こっているのかについて誰かが手がかりを持っていますか?
編集
私の質問を明確にするために、私はDisplayViewよりも大幅に小さいビットマップを作成しています。ビットマップをDisplayViewに描画しようとすると、ビットマップは描画したものとはまったく異なり、適切に拡大縮小されません。キャンバスがビットマップを正しく描画しないのはなぜですか?
UPDATE
DiplayのonDrawメソッドで、行items.onDraw(canvas);
を前に移動しましたcanvas.scale(200, 200);
。これで、テスト円が正しく描画されます。以前の方法で円を描くことを完全に無視するために行うこのような単純な変更は何ですか?