我是 android 的新手,所以我试图在 gridview 中显示超过 50 Xhdpi 的图像大小,但是当我执行程序时这样做时,它会保持屏幕一段时间然后执行。
谁能说出为什么需要时间的原因。
这是我的代码:
mGv_detail = (GridView) findViewById(R.id.gridView1);
init();
key_value = getIntent().getIntExtra("values", 0);
switch (key_value) {
case 0:
mGv_detail.setAdapter(new DetailAdapter(this, first_images));
break;
@Override
public View getView(final int position, View view, ViewGroup parent) {
View v = view;
RecordHolder holder = null;
LayoutInflater mInflater = (LayoutInflater) mContext
.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
if (v == null) {
v = mInflater.inflate(R.layout.items, parent, false);
holder = new RecordHolder();
holder.imagev = (ImageView) v.findViewById(R.id.imag_v);
v.setTag(holder);
} else {
Log.e("Position", "" + position);
holder = (RecordHolder) v.getTag();
}
Bitmap bitmap1 = BitmapFactory.decodeResource(v.getResources(),
items.get(position));
holder.imagev.setImageBitmap(bitmap1);
// holder.imagev.setImageResource(items.get(position));
holder.imagev.setAdjustViewBounds(true);
holder.imagev.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(mContext, Christmas.class);
i.putExtra("clickposition", position);
Log.e("postiont clicked", position+"");
mContext.startActivity(i);
}
});
return v;
}
static class RecordHolder {
ImageView imagev;
}
}
这是很多图像。即使对于本地图像文件,它也会滞后。
您应该使用"通用图像加载器"之类的工具 -
https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/library/src/com/nostra13/universalimageloader/core/ImageLoader.java
基本上,鉴于图像很多,这将需要一些时间。我有一个包含大约这么多图像的 GridView,使用通用图像加载器,即使在快速的新设备上也需要大约 3 或 4 秒。但是,它会立即显示,您可以看到网格充满图像,如果您使用工具,这没什么大不了的。如果你不这样做,你真的会感到滞后。
显示 GridView 中的单元格的 getView 方法正在同步将位图加载到内存中。 鉴于这种事件顺序,延迟是非常自然的。 如果您使用适用于 Android 的众多图像加载库之一,则可以轻松地将这项工作卸载到后台线程,并在准备就绪时回调。 我个人最喜欢的是毕加索。
http://square.github.io/picasso/
您可以将毕加索添加为 jar 文件或通过 gradle 添加,然后图像加载将如下所示:
int resId = images.get(position);
Picasso.with(getContext()).load(resId).into(holder.imagev);