我得到OutOfMemoryError
,而我加入可變背景的GridView ... 在java.lang.OutOfMemoryError在android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:374)
final Bitmap shelfBackground = BitmapFactory.decodeResource(resources, background);
這裏是我的代碼。
public class ShelvesView extends GridView {
private Bitmap mShelfBackground;
private int mShelfWidth;
private int mShelfHeight;
public ShelvesView(Context context) {
super(context);
}
public ShelvesView(Context context, AttributeSet attrs) {
super(context, attrs);
load(context, attrs, 0);
}
public ShelvesView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
load(context, attrs, defStyle);
}
private void load(Context context, AttributeSet attrs, int defStyle) {
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ShelvesView, defStyle, 0);
int imageWidth = options.outWidth;
final Resources resources = getResources();
final int background = a.getResourceId(R.styleable.ShelvesView_shelfBackground, 0);
final Bitmap shelfBackground = BitmapFactory.decodeResource(resources, background);
if (shelfBackground != null) {
mShelfWidth = shelfBackground.getWidth();
mShelfHeight = shelfBackground.getHeight();
mShelfBackground = shelfBackground;
}
a.recycle();
}
@Override
protected void dispatchDraw(Canvas canvas) {
final int count = getChildCount();
final int top = count > 0 ? getChildAt(0).getTop() : 0;
final int shelfWidth = mShelfWidth;
final int shelfHeight = mShelfHeight;
final int width = getWidth();
final int height = getHeight();
int bottom = (count > 0) ? getChildAt(count - 5).getBottom() + shelfHeight : 0;
final Bitmap background = mShelfBackground;
for (int x = 0; x < width; x += shelfWidth) {
for (int y = top; y < height; y += shelfHeight) {
canvas.drawBitmap(background, x, y, null);
}
}
//drawDecorations(canvas, top, shelfHeight, width);
// canvas.drawBitmap(mShelfLeftLayer,0,bottom, null);
super.dispatchDraw(canvas);
}
}
我試過那個。但是我在「canvas.drawBitmap(background,x,y,null)」出現錯誤;「 – indraja
您可以發佈您收到的錯誤消息嗎? – Pie
我得到以下錯誤日誌..和 (ShelvesView.java:72)是「canvas.drawBitmap(background,x,y,null);」在dispatchDraw方法 E/AndroidRuntime(6296):顯示java.lang.NullPointerException E/AndroidRuntime(6296):\t在android.view.GLES20Canvas.drawBitmap(GLES20Canvas.java:692) E/AndroidRuntime(6296):\t在android.view.GLES20RecordingCanvas.drawBitmap(GLES20RecordingCanvas.java:103) E/AndroidRuntime(6296):\t at com.example.home.ShelvesView.dispatchDraw(ShelvesView.java:72) – indraja