我目前正在开发一个从相机拍摄照片并将photoPath保存在数据库中的项目,这工作正常,实际上我在加载所有图像时正确处理内存生成缩略图。
我想要的是我正在尝试将线程专门用于在布局中每个加载一个图像,因为例如,如果我有50个,正常加载它会显示布局,直到所有50个加载,同时它没有任何显示。
我已经尝试实现这个线程来加载一个,然后另一个,但它是一样的,直到它加载所有,它显示所有,这里我的代码:
String query = "Select id_reg_mem, information from Memory_REG where type = 'PHOTO' and id_memory =" + id_memory;
final Cursor resultado = memoryDB.rawQuery(query, null);
if(resultado.moveToFirst())
noPhotos = resultado.getCount();
for(int i=0; i<noPhotos; i++)
{
new Thread()
{
public void run()
{
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
updateNewPhoto(resultado.getString(1)); // I send the path from the DB to a method I made to add a tablerow with the image (inside an imageview)
}
});
}
}.start();
if(i + 1 == noPhotos)
break;
resultado.moveToNext();
}
这个方法,我将一个图像加载到TableRow中的ImageView。此方法实际上正在加载来自DB的所有图像。
protected void updateNewPhoto(String path)
{
ImageView iv;
if(rows == null) {
rows = new ArrayList<TableRow>();
rows.add(new TableRow(TL.getContext()));
iv = new ImageView(TL.getContext());
iv.setLayoutParams(new TableRow.LayoutParams(250,250));
iv.setTag(DB_Utils.maxIDRegMem(memoryDB) - 1);
iv.setImageBitmap(getBitmapThumbnail(path));
rows.get(0).addView(iv);
TL.addView(rows.get(0));
count = 2;
}
else
{
iv = new ImageView(TL.getContext());
iv.setLayoutParams(new TableRow.LayoutParams(250,250));
iv.setTag(DB_Utils.maxIDRegMem(memoryDB) - 1);
iv.setImageBitmap(getBitmapThumbnail(path));
if(count == 2)
{
rows.get(rows.size() - 1).addView(iv);
count = 1;
}
else
{
rows.add(new TableRow(TL.getContext()));
rows.get(rows.size() - 1).addView(iv);
TL.addView(rows.get(rows.size() - 1));
count = 2;
}
}
对我来说不幸的是,直到所有图像都被加载(所需的3秒钟)才会显示所有图像。我想的是没有图像限制,这就是为什么我想要一种每个人加载图像的方式,而不是一起加载。
你有什么想法吗?我感谢您的帮助。 感谢。