這是我第一次在這裏提出問題,所以我會盡量保持主題。我試圖通過創建一個適當大小的Bitmap對象的ArrayList並按順序繪製它們來隨機生成背景。順便說一下,該實現可以很好地加載單個位圖;它只是在列表中磕磕絆絆。Android:在黑色背景中繪製Bitmaps數組結果列表
在我開始使用代碼之前,我想指出理想情況下,我會通過添加單個像素或圖塊來製作單個位圖,並且實際上已經嘗試了一些變體,但它們都會導致黑色屏幕;我開始認爲這可能是我如何繪製到畫布上的問題。無論如何,這是我有什麼:
首先,我生成隨機ArrayList,目前只使用3種顏色。我會讓它返回列表,但它只是引用線程變量中的一個私有方法,所以它並不重要。
private void genMap(Resources res)
{
// Load basic tiles.
Bitmap green = BitmapFactory.decodeResource(res, R.drawable.green);
Bitmap red = BitmapFactory.decodeResource(res, R.drawable.red);
Bitmap blue = BitmapFactory.decodeResource(res, R.drawable.blue);
// All tiles must be the same size.
int tile_width = green.getWidth();
int tile_height = green.getHeight();
int num_x = mCanvasWidth/tile_width;
int num_y = mCanvasHeight/tile_height;
for (int j = 0; j < num_y; j++)
{
for (int i = 0; i < num_x; i++)
{
double r = Math.random();
Bitmap tile;
if (r <= 1/3) {tile = green;}
else if (r <= 2/3) {tile = red;}
else {tile = blue;}
// Create a new Bitmap in order to avoid referencing the old value.
mBackgroundImages.add(Bitmap.createBitmap(tile));
}
}
}
所以,這就是隨機值如何映射到模式。該方法在線程的構造函數中調用,每次調用onCreate時都會調用該方法;現在,我只是清除列表並每次製作一個新的隨機模式:
...
Resources res = context.getResources();
mBackgroundImages = new ArrayList<Bitmap>();
genMap(res);
...
最後,繪製方法;它工作正常加載通過BitmapFactory.decodeResources一個位圖,但顯示這樣做的時候黑屏:
private void doDraw(Canvas canvas)
{
/* Draw the bg.
* Remember, Canvas objects accumulate.
* So drawn first = most in the background. */
if (canvas != null)
{
if (mBackgroundImages.size() > 0)
{
int tile_width = mBackgroundImages.get(0).getWidth();
int tile_height = mBackgroundImages.get(0).getHeight();
for (int y = 0; y < mCanvasHeight/tile_height; y++)
{
for(int x = 0; x < mCanvasWidth/tile_width; x++)
{
// Draw the Bitmap at the correct position in the list; Y * XWIDTH + X, at pos X * XWIDTH, Y * YWIDTH.
canvas.drawBitmap(mBackgroundImages.get((x + y * (mCanvasWidth/tile_width))), x * tile_width, y * tile_height, null);
}
}
}
}
}
任何幫助,將不勝感激,謝謝。
絕對是一個平鋪的算法。我認爲這個問題必須處理這些圖像,因爲如果出現拼貼問題,通常圖像繪圖會有奇怪的偏移。 –