2014-10-20 3 views
0

У меня есть список элементов, где я показываю растровое изображение рядом с именем элемента. Это растровое изображение должно быть создано из 2-х изображений, у меня есть фоновое изображение с меньшим фоном, чтобы добавить поверх фона.Android-растровое изображение с двух растровых изображений растровых изображений не видно

Я вижу, что фоновое изображение не присутствует в некоторых моих строках в моем списке. Это непротиворечиво, когда и какая строка имеет комбинированное растровое изображение без фона. Это не всегда одна и та же строка, где объединенное растровое изображение не имеет фона, и это не всегда первая или не всегда последняя строка, в которой растровое изображение не имеет фона. И иногда весь список имеет каждую строку с правильным изображением.

Изображение ниже представляет собой макет, показывающий мою проблему.

Issue mockup image

Мой код для создания объединенного растрового изображения заключается в следующем.

Bitmap combinedBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
Canvas combinedCanvas = new Canvas(combinedBitmap); 

// Add the first bitmap to the canvas (this is my background and this is what appears to be 
// missing on some rows in my list on some occasions) 
combinedCanvas.drawBitmap(backgroundBitmap, 0, 0, null); 

// my second smaller image, on top of the first image but 1 pixel in 
// from the left and 20 pixels down from the top 
combinedCanvas.drawBitmap(foregroundBitmap, 1, 20, null); 

return combinedBitmap; 

Примечание: Мой backgroundBitmap генерируется из растяжимой, используя следующий код

Bitmap backgroundBitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), 
               drawable.getMinimumHeight(), 
               Bitmap.Config.ARGB_8888); 
backgroundBitmap.setDensity(resources.getDisplayMetrics().densityDpi); 
Canvas canvas = new Canvas(backgroundBitmap); 
drawable.draw(canvas); 

Любые предложения о том, что у меня неправильно, или даже, где искать, чтобы попытаться решить эту проблему было бы весьма признателен.

EDIT: Я испытал добавление цвета на фоне моих combinedCanvas, чтобы попытаться увидеть, где формирование изображения происходит неправильно, добавив следующий код

// TEMP: fill the canvas in red for now so I can see which combinedBitmaps are missing 
// the background image 
combinedCanvas.drawColor(Color.RED); 

Теперь строки, которые не имеют фона окрашены в красный цвет. Это указывает на то, что приведенный выше код для создания комбинированного холста каким-то образом не добавляет backgroundBitmap. Я проверил, и мое фоновое изображение не равно null для каждой строки в моем списке.

ответ

1

Этот метод подходит для меня. Это в C# (Xamarin), вам придется перевести его на Java, я боюсь.

public static Bitmap CombineImages(Bitmap background, Bitmap foreground) 
    { 

     int width = background.Width, height = background.Height; 
     Bitmap cs = Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888); 
     Canvas comboImage = new Canvas(cs); 
     background = Bitmap.CreateScaledBitmap(background, width, height, true); 
     comboImage.DrawBitmap(background, 0, 0, null); 

     int top = (int)(0.05 * height); 
     int left = (int)(width - (foreground.Width + (width * 0.05))); 

     comboImage.DrawBitmap(foreground, left, top, null); 

     return cs; 
    } 

Левые и верхние жестко запрограммированы для моих требований, было бы лучше передать их в качестве аргументов.

+0

Благодарим вас за ответ, который не слишком отличается от моего кода, поэтому я не вижу, что будет причиной моей проблемы. Мой код работает с перерывами. Мне интересно, если это связано с тем, что у меня есть эти сгенерированные эскизы в списке. – se22as

Смежные вопросы