Android图片网格滚动问题

时间:2013-06-12 14:21:52

标签: android performance gridview android-gridview smooth-scrolling

我遇到以下性能问题。我正在开发一个Android平板电脑应用程序,有一个像图库的网格视图。每个项目有大约3个文本视图(短文本)和2个图像视图(1个用于背景,1个小图标用于重要项目)。目标设备分辨率相当大(1920x800),因此网格矩阵显示为6 x 5项。

我已经实现了,但滚动体验很糟糕。当我在任何时候慢慢滚动时,应该出现6个项目的新行,会有一个短暂的冻结。然后该行将到来并且滚动正常,直到到达出现的行的结尾并且再次出现新行。滚动回以前可见的行时的行为相同。 任何人都可以给我任何可以帮助顺利滚动的优化提示。

在我的适配器中,我在getView方法中使用优化功能作为持有者类和getTag()。图像不是从网络加载,而是通过setImageURI方法从SD卡加载。

无论如何,我期待这里的问题。加载一行 - 这种方式的6张背景图片必须花费一些时间,但我不知道如何制作解决方法。 bg图像的平均大小为50 KB。这是我的getView。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(mItemResId, parent, false);
        holder = new ViewHolder();
        holder.tvName = (TextView) convertView.findViewById(R.id.grid_item_name);
        holder.tvPref = (TextView) convertView.findViewById(R.id.grid_item_pref);
        holder.tvCustomText = (TextView) convertView.findViewById(R.id.grid_item_custom);
        holder.ivBg = (ImageView) convertView.findViewById(R.id.grid_item_bg);
        holder.ivSmallIcon = (ImageView) convertView.findViewById(R.id.grid_item_icon);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    Product item = getItem(position);
    holder.tvName.setText(item.getName());
    holder.tvPref.setText(item.getPreference());
    holder.tvCustomText.setText(item.getCustomText());
    if (item.isImportant()) {
        holder.ivSmallIcon.setVisibility(View.VISIBLE);
    } else holder.ivSmallIcon.setVisibility(View.GONE);

    File f = new File( item.getImagePath() );
    if ( f.exists() ) {
        holder.ivBg.setImageURI( Uri.fromFile(f) );
    } else { 
        holder.ivBg.setImageResource(R.drawable.no_img);
    }

    return convertView;
}

或者,有没有机会在调用getView方法之前预取不可见的项目或至少是图像?还是其他任何有用的东西?

非常感谢。

1 个答案:

答案 0 :(得分:0)

最后,我使用了一个帮助很多的异步任务。

此处的解决方案示例:Using AsyncTask to load Images in ListView