0

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

我已经实现了,但滚动体验不好。当我在任何时候慢慢地滚动6行的新行时,就会出现一个简短的冻结。然后线将会出现,并且滚动正常,直到到达出现的线的末端并且新的线应该再次出现。滚动回到之前可见的行时,具有相同的行为。 任何人都可以给我任何优化技巧,可以帮助顺利滚动。

在我的适配器中,我使用最优化功能作为持有者类,并在getView方法中使用getTag()。图像不是从web加载,而是通过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方法之前预取不可见的项目或至少是图像?或其他任何可以帮助的?

非常感谢。

回答