首先,是的,我知道这个问题,但答案对我没有帮助。是的,它解决了“滚动时改变位置”的问题,但它不是我的问题的最佳解决方案。让我解释...
所以,这是我的getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
UnscaledImageView imageView;
if(convertView == null) {
imageView = new UnscaledImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(mIconSize, mIconSize));
imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageView.setImageResource(mThumbIds[position]);
} else {
imageView = (UnscaledImageView)convertView;
}
return imageView;
}
常见的解决方案是移到声明imageView.setImageResource(mThumbIds[position]);
之外和之下if
。但这又产生了一个问题……
您可能已经注意到我使用的是 aUnscaledImageView
而不是ImageView
. 这是一个自定义子类ImageView
,我setImageResource()
用一些额外的选项覆盖了手动解码位图的方法以满足我的需求。手动解码是导致我的问题的原因。
如果该setImageResource()
方法停留在 内if
,没问题,位图解码将完成一次位图(在 GridView 加载期间)并且滚动将是平滑的......但是每次滚动时图像会跳转到不同的位置。
但是如果该setImageResource()
方法停留在 之外if
,图像不会跳转到不同的位置,但所有图像都会随着每次滚动而不断解码。滚动将是生涩的,根本不流畅。
我该如何解决这个问题?有任何想法吗?