我想在自定义视图中的onDraw()方法中创建类似拼图(将图像放在一起)的内容。所以起初我打电话给它并显示我的整个谜题。 但过了一段时间我想改变我的拼图图像。所以当我从另一个线程更改图像源并使()无效时,可能会强制应用程序关闭。 从你的角度来看,我该怎样做才能达到这个目标? 这是我的代码:
protected void onDraw(Canvas canvas)
{
super.onDraw(canvas);
canvas.drawARGB(100, 255, 255, 0);
canvas.translate(posX, posY);
canvas.scale(imageScale,imageScale);
InitDrawing(canvas);
}
public void InitDrawing(Canvas canvas)
{
for (int a = 0 ; a < 5 ;a++)
{
for(int i =0 ; i<4 ; i++)
{
canvas.drawBitmap(toop,(toop.getWidth()*i ) ,(toop.getHeight()*a) , null);
downloading = true;
IMGnotExisting = true;
Log.i("Canvas loop", "Showing");
}
}
}
public class SDChecker implements Runnable
{
public SDChecker()
{
// String name = s;
PauseTHR = new Object();
pause = false;
}
@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())
{
toop = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/GreatMap/tile0.jpg");
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
invalidate();
Log.i("Create bit map", "Bitmap create");
// Toast.makeText(getContext(), "loadmap tile", Toast.LENGTH_SHORT);
IMGnotExisting = false;
}
else
{
IMGnotExisting = true;
}
}
}
答案 0 :(得分:2)
仅从UI线程调用invalidate。
要在UI线程之外调用invalidate,请使用postInvalidate()
。
希望这有帮助。