説明も修正もできない奇妙なカスタム ビューの動作が発生しています。
私はカスタム ビューを持っています。呼び出しBitmap
のコンテンツをバッファリングするために を使用しています。onDraw()
バッファ イメージの幅を 2000 に設定するとすべてが機能しますが、4000 に増やすとバッファリング プロセスは正常に機能しているように見えますが、onDraw()
描画しようとすると何も描画されません。Bitmap
が現在描画されているか、実際にCanvas.drawBitmap()
は描画されていません。
これはメモリ不足の問題ではありません。
コア機能は次のとおりです。
public class CustomView extends View {
int viewWidth;
int viewHeight;
Bitmap bmp;
int bmpWidth = 2000; // if I increase this nothing works
protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) {
viewHeight = (int) MeasureSpec.getSize(heightMeasureSpec);
if(viewHeight > 0) {
if(bmp == null) {
try {
bmp = Bitmap.createBitmap(bmpWidth+extraWidth, viewHeight , bitmapCfg);
} catch(OutOfMemoryError E){
System.gc();
outOfMemory = true;
return;
}
viewWidth = bmpWidth + extraWidth;
createCanvas();
}
}
setMeasuredDimension((int)viewWidth,(int)viewHeight);
}
public void createCanvas() {
int pos = 0;
Canvas canvas = new Canvas(bmp);
canvas.drawRect(0, 0, bmpWidth, viewHeight, whiteColor);
canvas.drawText("TEST",pos,140,textColor);
pos += textColor.measureText("TEST");
this.viewWidth = (int) pos;
setMeasuredDimension(viewWidth,viewHeight);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(outOfMemory) {
return;
}
if(bmp == null) {
return;
}
canvas.drawBitmap(bmp, 0,0, paint); // I think this failes to draw.
}
}