Android 如何防止GridView图像在滚动时改变位置?
首先,是的,我知道这一点,但答案对我没有帮助。是的,它解决了“滚动时改变位置”的问题,但它不是解决我问题的最佳方案。让我解释一下 因此,这是我的getView:Android 如何防止GridView图像在滚动时改变位置?,android,bitmap,android-imageview,decoding,android-gridview,Android,Bitmap,Android Imageview,Decoding,Android Gridview,首先,是的,我知道这一点,但答案对我没有帮助。是的,它解决了“滚动时改变位置”的问题,但它不是解决我问题的最佳方案。让我解释一下 因此,这是我的getView: @Override public View getView(int position, View convertView, ViewGroup parent) { UnscaledImageView imageView; if(convertView == null) { imageView = new
@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
语句的外部和下方。但这又带来了另一个问题
您可能已经注意到,我使用的是UnscaledImageView
而不是ImageView
。这是ImageView
的一个自定义子类,其中我覆盖了setImageResource()
方法,使用一些额外的选项手动解码位图,以满足我的需要。手动解码是导致我的问题的原因
如果setImageResource()
方法停留在If
中,没有问题,位图解码将为位图执行一次(在GridView加载期间),滚动将平滑但是图像会随着每个卷轴跳到不同的位置。
但是如果setImageResource()
方法停留在if
之外,图像将不会跳转到不同的位置,但所有图像将在每次滚动时不断解码滚动将不平稳。
我如何解决这个问题?有什么想法吗?也许你可以对解码后的图像使用某种缓冲或缓存。setImageResource
方法应检查其输入图像是否已在缓冲区中(即,是否已解码)。如果是这样,那么您的方法只需从缓冲区检索解码图像。如果没有,那么它将解码图像并将其存储在缓冲区中以备将来使用。如何实现缓冲区/缓存取决于您自己的需要。我相信有很多可能性。通过这种方式,您可以将setImageResource
的调用移出if-then
块,而不必每次调用getView
方法时都对图像进行解码。也许您可以对解码后的图像使用某种缓冲或缓存。setImageResource
方法应检查其输入图像是否已在缓冲区中(即,是否已解码)。如果是这样,那么您的方法只需从缓冲区检索解码图像。如果没有,那么它将解码图像并将其存储在缓冲区中以备将来使用。如何实现缓冲区/缓存取决于您自己的需要。我相信有很多可能性。通过这种方式,您可以将setImageResource
的调用移出if-then
块,而不必每次调用getView
方法时都对图像进行解码。可能是这样的吗?是的,这是android上捕捉位图的标准方法。但具体的实现取决于您自己,并取决于应用程序的需要。您可能需要实现复杂但非常高效的东西,或者需要实现简单(如位图数组)但效率不高的东西。鲁卡什似乎是一个很好的起点。事实上,我打算在我自己的应用程序上试试:-)也许是这样的?是的,这是在android上捕捉位图的标准方法。但具体的实现取决于您自己,并取决于应用程序的需要。您可能需要实现复杂但非常高效的东西,或者需要实现简单(如位图数组)但效率不高的东西。鲁卡什似乎是一个很好的起点。事实上,我将在我自己的应用程序上尝试:-)