有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用线程在Android Studio中一次加载一个多位图

我目前正在做一个项目,从相机上拍摄照片,并将光路保存在数据库中,这工作正常,实际上我正在正确处理内存,在加载所有图像时生成缩略图

我想要的是,我正试图用线程在版面中逐个加载图像,因为例如,如果我有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秒钟)。我在思考图像的无限性,这就是为什么我想要一种方法,让图像一个一个地加载,而不是全部一起加载

你有什么想法吗?我感谢你的帮助。 谢谢


共 (0) 个答案