2010-03-10 4 views
3

캔버스에 다른 이미지를 하나씩 추가하고 싶습니다. 이 내 코드입니다 : -캔버스에 3 개의 이미지를 android에 추가하는 방법

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ImageButton im1 = (ImageButton)findViewById(R.id.btnPN); 
    im1.setBackgroundDrawable(getImage());  
} 

public BitmapDrawable getImage() 
{ 

    Drawable image1 = getResources().getDrawable(R.drawable.imagename); 
    Drawable image2 = getResources().getDrawable(R.drawable.imagename); 
    Drawable image3 = getResources().getDrawable(R.drawable.imagename); 

    Bitmap bitmap = Bitmap.createBitmap(image1.getIntrinsicWidth()    
      +image2.getIntrinsicWidth()+image3.getIntrinsicWidth(), 
      image1.getIntrinsicHeight(),Bitmap.Config.ALPHA_8); 

    Canvas canvas = new Canvas(bitmap); 

    image1.setBounds(0, 0, image1.getIntrinsicWidth(), image1.getIntrinsicHeight()); 
    image1.draw(canvas); 

    image2.setBounds(image1.getIntrinsicWidth(), 0, image2.getIntrinsicWidth(), 
      image2.getIntrinsicHeight()); 
    image2.draw(canvas); 

    image3.setBounds(image1.getIntrinsicWidth()+image2.getIntrinsicWidth(), 
         0, image3.getIntrinsicWidth(), 
         image3.getIntrinsicHeight()); 
    image3.draw(canvas); 


    BitmapDrawable bu = new BitmapDrawable(bitmap); 
    return bu;  

}

하지만이 작동하지 않습니다.

누군가 내가 여기서 잘못하고있는 것을 말해 줄 수 있습니까?

덕분에, Farha

답변

4

나는 너무 오래 전에 비슷한 일을 해결했다, 당신은 당신의 솔루션을 거의 다 왔어. 그러나 Rect 객체를 사용하여 매번 비트 맵을 그릴 위치를 오프셋해야합니다.

Rect srcRect; 
Rect dstRect; 

for (int i = 0; i < images.length; i++){ 
    srcRect = new Rect(0, 0, images[i].getWidth(), images[i].getHeight()); 
    dstRect = new Rect(srcRect); 
    if (i != 0){ 
     dstRect.offset(images[i-1].getWidht(), 0) 
    } 
    canvas.drawBitmap(images[i], srcRect, dstRect, null); 
} 

이 한 줄에 모두 복사합니다 : 당신은 비트 맵 이미지 []의 배열로 모든 이미지를 복사 한, 그리고 위처럼 당신이 당신의 비트 맵과 캔버스를 만든 가정하면, 다음과 같은 사용 . 두 개의 for 루프를 사용하여 네 개의 이미지를 정사각형으로 복사하거나 비슷한 이미지를 복사하는 것은 너무 어렵지 않습니다.

관련 문제