ビューから拡張するクラスがあります。このクラスの onDraw(Canvas canvas) メソッドで、複数のビットマップをまとめてキャンバスとして表示します。onDraw メソッドが繰り返し実行されると思います。ビットマップの 1 つがコードの SDcard ダウンロード セクションに存在しないかどうかを確認する必要があり、それが継続的にダウンロードされます。私のコードはここにあります:
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
canvas.drawARGB(100, 255, 255, 0);
canvas.translate(posX, posY);
canvas.scale(imageScale,imageScale);
int b = 0;
for (int a = 0 ; a < 5 ;a++)
{
for(int i =0 ; i<4 ; i++)
{
if(maptile != null){
canvas.drawBitmap(maptile,(256*i ) ,(256*a) , null);
downloading = false;
b++;
}else
{
canvas.drawBitmap(toop,(toop.getWidth()*i ) ,(toop.getHeight()*a) , null);
Log.i("Canvas loop", "Showing");
}
}
}
}
私の問題は、onDraw メソッド中に SDcard を継続的にチェックできないことです。実際、ビットマップがストレージにあるかどうかを確認したいので、表示します。存在しない場合は、その特定のビットマップがダウンロードされるまで、別のビットマップを表示します。この目標を達成するにはどうすればいいですか????
編集: このクラスのコンストラクターから実行されるスレッドを作成します。このスレッドはSDカードをチェックします。特定のファイルがSDカードにダウンロードされるたびに、このファイルをビットマップとして設定します。ビューを再描画して新しいビットマップを表示しようとすると、アプリがクラッシュします。あなたの考えは何ですか? 問題は何ですか??
public class SDChecker implements Runnable
{
@Override
public void run()
{
while( true)
{
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File file = new File(Environment.getExternalStorageDirectory()+ "/GreatMap","tile0.jpg");
if (file.exists())
{
maptile= BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/GreatMap/tile0.jpg");
invalidate();
Log.i("Create bit map", "Bitmap create");
Toast.makeText(getContext(), "loadmap tile", Toast.LENGTH_SHORT);
IMGnotExisting = false;
}
else
{
IMGnotExisting = true;
}
}
}
}
invalidate() の後、 onDraw() メソッドが呼び出されます。これで、maptile ビットマップができました。今回は、maptile ビットマップを描画する必要があります。しかし、そうではなく、アプリがクラッシュします。