我有一个从 View 扩展的类。在此类的 onDraw(Canvas canvas) 方法中,我将多个位图放在一起并将其显示为画布。我认为 onDraw 方法重复执行。我必须检查我的代码的 SD 卡下载部分中是否不存在位图之一,它会不断发生。我的代码在这里:
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。事实上我想检查位图是否在我的存储中,所以显示它。如果没有,则显示另一个位图,直到下载该特定位图。我应该怎么做才能达到这个目标????
编辑: 我在这个类中创建了一个从我的构造函数运行的线程。yhis 线程检查 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位图。但它不会和应用程序崩溃。