在我的应用程序中,我有一个库,一个包含图像视图的网格视图。代码如下:
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)块中移动调整大小的代码,则元素的顺序不会保持不变——随着用户在网格视图中滚动,每个图像的位置都会不断变化。
在不出现性能问题的情况下,正确的方法是什么?
每次获得非null的convertView时,都需要重新绑定数据。这意味着您需要在其他地方(在适配器、位图缓存等中)保留对缩放位图的引用