Androidで同じBitmapが描画されてしまう。
同じ図形が書かれてしまう。
Android3.2(API13)以下では、正常に異なるbitmapuが表示される。
Android4.0(API14)以上では、同じbitmapが表示されるようになった。
Android4.0以上では、表示のさせ方を変更しないといけない。
小さなBitmapを16x16個書いていたが、
大きなBitmap(縦横16倍)へ、一つづつコピーしていく方法に変更した。
for (x = 0; x < 16; x++) { if ((bitmap.getWidth() != width) || (bitmap.getHeight() != height)) { bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); } getShape(colorArray); bitmap.setPixels(colorArray, 0, width, 0, 0, width, height); canvas.drawBitmap(bitmap, sx, sy, null); }
GLES20RecordingCanvas.java @Override public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) { super.drawBitmap(bitmap, left, top, paint); mDisplayList.mBitmaps.add(bitmap);<=リストに追加されるだけ? <=実際には、描かれるのは別のタイミング <=描かれるまでに、bitmapを書き換えると、 <=書き換わってしまう。 // Shaders in the Paint are ignored when drawing a Bitmap }
GLES20RecordingCanvas.java:687 @Override public void drawBitmap(Bitmap bitmap, float left, float top, Paint paint) { // Shaders are ignored when drawing bitmaps int modifiers = paint != null ? setupModifiers(bitmap, paint) : MODIFIER_NONE; final int nativePaint = paint == null ? 0 : paint.mNativePaint; nDrawBitmap(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, left, top, nativePaint); if (modifiers != MODIFIER_NONE) nResetModifiers(mRenderer, modifiers); }
ArrayList.java /** * Adds the specified object at the end of this {@code ArrayList}. * * @param object * the object to add. * @return always true */ @Override public boolean add(E object) { Object[] a = array; int s = size; if (s == a.length) { Object[] newArray = new Object[s + (s < (MIN_CAPACITY_INCREMENT / 2) ? MIN_CAPACITY_INCREMENT : s >> 1)]; System.arraycopy(a, 0, newArray, 0, s); array = a = newArray; } a[s] = object; size = s + 1; modCount++; return true; }