2016-07-18 5 views
0

私はキャンバスに画像を描画しようとしています。AndroidはImageViewをプログラムで描画します

this.Icon = new ImageView(context); 
this.Icon.SetImageResource(Resource.Drawable.icon); 
this.Icon.LayoutParameters = new ViewGroup.LayoutParams(width, height); 

そしてOnDraw中:コンストラクタで

protected override void OnDraw(Canvas canvas) 
{ 
    this.Icon.SetX(x); 
    this.Icon.SetY(y); 
    this.Icon.RequestLayout(); 
    this.Icon.Draw(canvas); 
} 

それは現れていません。何か不足していますか?

私のクラスはView

+1

ここでアイコンを定義しますか?どのクラスがあなたのクラスを拡張していますか?シンプルな表示の場合、コードは機能しません。 viewGroupの場合は、 'addView'メソッドを追加しましたか? –

+0

私のクラスはViewを拡張します。 Iconは、クラス内のパブリックプロパティです。 – Darius

+0

ImageViewをビューの中に置くことはできませんか?ビュー内に画像を描画する他の方法はありますか? – Darius

答えて

0

を拡張し、私は、ビュー内の画像を描画する方法を見つけた:

Bitmap bitmap = BitmapFactory.DecodeResource(Resources, Resource.Drawable.icon); 
var scaledBitmap = Bitmap.CreateScaledBitmap(bitmap, w, h, false); 
canvas.DrawBitmap(scaledBitmap, x, y, paint); 

しかし、これは良い習慣ですか?この方法でそれを描くのは、より高価ですか?

+1

これは、できるだけ軽量である必要があるonDrawメソッドの計算量が多いため、悪い方法です。そのため、ビットマップを他の場所でデコードして参照する必要があります。または、「ビットマップ描画」を行うBitmapDrawableを作成し、それを参照することができます。そして、 'onDraw'メソッド呼び出しでbitmapDrawable.draw(キャンバス) –

+1

ああ、ほとんど忘れてしまった。あなたの場合、 'Drawable myIcon = getResources()。getDrawable(R.drawable.icon)'を提供することができます。次にmyIconリファレンスをフィールドとして保存し、 'onDraw'メソッドで' myIcon.draw(canvas) 'を呼び出すことができます。 –

関連する問題