1

在我的应用程序中,我有一个画廊,一个包含图像视图的网格视图。代码如下:

public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {  
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(LAYOUT_WIDTH, LAYOUT_HEIGHT));
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setPadding(8, 8, 8, 8);
        } else {
            imageView = (ImageView) convertView;
        }
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inSampleSize = 5;
        Bitmap previewBitmap = Bitmap.createScaledBitmap(
                        BitmapFactory.decodeFile(picture_paths[position], o), 
                        LAYOUT_WIDTH, 
                        LAYOUT_HEIGHT, 
                        false);
        imageView.setImageBitmap(previewBitmap);
        return imageView;
    }

当然,它的性能非常糟糕,因为它必须在每次绘制元素时调整大小并加载位图。但是,如果我在 if(convertView == null) 块内移动调整大小代码,则不会保持元素的顺序 - 当用户滚动浏览 gridview 时,每个图像都会不断改变位置。

在没有性能问题的情况下执行此操作的正确方法是什么?

4

1 回答 1

3

每次得到一个非空的convertView,都需要重新绑定数据。这意味着您需要在其他地方(在适配器中、位图缓存中等)保留对缩放位图的引用。

于 2013-09-03T23:41:34.067 回答