私はアニメーション付きのシンプルなアプリに取り組んでいます。標準ビューを使用しています。onDraw メソッドで、私のアプリは背景 (ビットマップとして保存) といくつかのスプライトを描画します。メイン ループでは、背景のビットマップを変更する必要があります (コードが添付されています)。その setPixel() メソッドに使用します。ビットマップを変更しようとすると、LogCat で「ビットマップからテクスチャを生成できません」というメッセージが表示されることがあります。その後も背景は画面に表示されますが、getPixel() メソッドも setPixel() メソッドも使用できません。ビットマップがリサイクルされたことが原因であるというヒントを見つけましたが、アプリにいくつかのコントロールを追加しました。だから、私は何が問題なのか分かりません。
public void drawOnBmp (float xF, float yF, float r) {
float[][] kolo;
float xP, yP;
float xStart, yStart;
xStart = xF - r / 2;
yStart = yF - r / 2;
kolo = new float[(int)r + 1][(int)r + 1];
for (int i = 0; i < 360; i++) {
xP = r / 2 + (float)(r / 2 * Math.cos(2 * Math.PI * (double)i / 360));
yP = r / 2 + (float)(r / 2 * Math.sin(2 * Math.PI * (double)i / 360));
kolo[(int)xP][(int)yP] = 1;
}
boolean start;
for (int i = 0; i < (int)r + 1; i++) {
start = false;
for (int j = 0; j < (int)r + 1; j++) {
if (kolo[i][j] == 1)
if (start == false) start = true;
else if (j >= r / 2) break;
if (start == true) kolo[i][j] = 1;
}
}
// obraz is a bitmap with background
for (int i = 0; i < (int)r; i++) {
for (int j = 0; j < (int)r; j++) {
if(kolo[i][j] == 1 && (int)xStart + i >= 0 && (int)yStart + j >= 0 &&
(int)xStart + i < obraz.getWidth() && (int)yStart + j < obraz.getHeight())
obraz.setPixel((int)xStart + i, (int)yStart + j, 0);
}
}
}
}