2016-07-18 5 views
0

나는 캔버스에 이미지를 그리려고합니다. 생성자에서 :안드로이드는 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); 
} 

이 표시되지 않습니다. 내가 놓친 게 있니?

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

하지만 좋은 방법은 다음과 같습니다

내 클래스는 View

+1

아이콘? 어떤 수업이 수업을 확장합니까? 간단한보기라면 코드가 작동하지 않습니까? viewGroup이라면'addView' 메소드를 추가 했습니까? –

+0

내 수업이 View를 확장합니다. 아이콘은 클래스의 공용 속성입니다. – Darius

+0

그래서 ImageView를 뷰 안에 넣을 수 없습니까? 보기 내부에 이미지를 그리는 다른 방법이 있습니까? – Darius

답변

0

내가보기 내부에 이미지를 그릴 수있는 방법을 발견 확장? 이런 방식으로 자원을 쓰는 것이 비용이 더 많이 듭니까?

+1

가능한 한 가볍기 위해 필요한 onDraw 메서드에서 무거운 계산을 수행하는 것은 좋지 않습니다. 따라서 다른 장소에서 비트 맵을 디코딩하고이를 참조해야합니다. 또는 '비트 맵 드로잉'을 수행하는 BitmapDrawable을 만들고 뷰에서 참조를 유지할 수 있습니다. 그리고 나서 'onDraw'메서드 호출에서 bitmapDrawable.draw (캔버스) –

+1

아, 거의 잊어 버렸습니다. 귀하의 경우에는'Drawable myIcon = getResources(). getDrawable (R.drawable.icon)'을 제공 할 수 있습니다. 그런 다음 myIcon 참조를 필드로 저장하고'onDraw' 메서드에서 myIcon.draw (canvas)를 호출 할 수 있습니다. –

관련 문제