Android网格视图有效加载图像

时间:2013-01-05 07:08:19

标签: android bitmap sd-card

我是android新手。我在目录中有超过一千个图像。我在网格视图中显示图像拇指。使用以下代码它是有效的。但问题是加载视图需要45秒。我需要它:用装载机显示网格并逐个加载图像。因此用户无法等待最后一张图像加载。

代码是:

public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater layoutInflater = (LayoutInflater) ctx
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        ListRowHolder listRowHolder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.ll_sponsor_list_item,
                    parent, false);
            listRowHolder = new ListRowHolder();
            listRowHolder.imgSponsor = (ImageView) convertView
                    .findViewById(R.id.imggrid_item_image);
            convertView.setTag(listRowHolder);

        } else {
            listRowHolder = (ListRowHolder) convertView.getTag();
        }
        try {

            listRowHolder.imgSponsor
                    .setImageBitmap(decodeSampledBitmapFromResource(
                            ImageName.get(position)));
        } catch (Exception e) {
            Toast.makeText(ctx, e + "", Toast.LENGTH_SHORT).show();
        }

        return convertView;
    }


    public static Bitmap decodeSampledBitmapFromResource(String fileName) {
        Bitmap picture = BitmapFactory.decodeFile(fileName);
        int width = picture.getWidth();
        int height = picture.getWidth();
        float aspectRatio = (float) width / (float) height;
        int newWidth = 98;
        int newHeight = (int) (98 / aspectRatio);
        return picture = Bitmap.createScaledBitmap(picture, newWidth,
                newHeight, true);
    }

1 个答案:

答案 0 :(得分:1)

它很慢的原因是因为您正在解码文件并在UI线程上生成缩放的位图,对于许多图像。因为您正在进行长时间的操作,所以您需要执行lazy loading of your images

前提类似于链接中的解决方案(您可以使用Handler),但您将解码文件并缩放位图,而不是在那里下载图像。