使用网格视图 xhdpi 图像时,屏幕需要几秒钟才能打开



我是 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);

最新更新