これはonDraw()
私のカスタムビューの方法です:
@Override
protected void onDraw(Canvas canvas) {
Paint p = new Paint();
p.setColor(Color.RED);
Bitmap bmp = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(),
Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(bmp);
c.drawARGB(255, 255, 0, 0);
c.drawText("Text", 50, 50, p);
canvas = c;
canvas.drawARGB(255, 0, 0, 255);
canvas.drawText("Text1", 20, 20, p);
// canvas = c;
}
上記の方法の結果は、色やテキストのないビューです。しかし、最初canvas = c
にコメントして最新のコメントを外すと(ブロックの最後の行で)、結果は「text1」が正しい位置に表示された青いビューになります。のこのオーバーライドの結果onDraw()
:
@Override
protected void onDraw(Canvas canvas) {
Paint p = new Paint();
p.setColor(Color.RED);
canvas.drawARGB(255, 0, 0, 255);
canvas.drawText("Text1", 20, 20, p);
}
カスタム ビューのキャンバスを参照すると、結果が変更されるのはなぜですか?また、最初のオーバーライドでも、ビューが色なしで表示され、赤色で表示されないのはなぜですか?
編集:
c1、c2 が、別々に作成されたクラス C のインスタンスであるとします。
c1 = c2;
次に、c1 のすべてのプロパティは c2 のプロパティと等しくなります。私の質問は次のとおりです。
- キャンバスのプロパティを使用する
canvas = c
と、c と等しくならないのはなぜですか? (c は赤でテキストがありますが、カスタム ビューには色もテキストもありません) - 1回目と2回目の違いは何
canvas = c
ですか? 先ほども言いましたが、結果が違います。