Как добавить 3 изображения на холсте в Android - PullRequest
3 голосов
/ 10 марта 2010

У меня есть 3 изображения, которые я хочу добавить одно за другим на холсте. Это мой код: -

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;    

}

но это не работает.

Может кто-нибудь сказать мне, что я здесь делаю не так?

Спасибо, Фара

1 Ответ

4 голосов
/ 10 марта 2010

Я должен был решить нечто подобное не так давно, и вы почти у цели. Однако вы должны использовать объекты 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);
}

Это скопирует их всех в одну строку. Это не так сложно адаптировать, чтобы скопировать 4 изображения в квадрат или что-то подобное, используя два цикла for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...