我是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);
}
答案 0 :(得分:1)
它很慢的原因是因为您正在解码文件并在UI线程上生成缩放的位图,对于许多图像。因为您正在进行长时间的操作,所以您需要执行lazy loading of your images。
前提类似于链接中的解决方案(您可以使用Handler
),但您将解码文件并缩放位图,而不是在那里下载图像。