我有一个显示一堆图像的列表。我正在使用 Universal Image Loader 将此图像从文件加载到 ImageView 。
这些图片有不同的尺寸,我希望所有图片都具有相同的宽度但每个图片的纵横比不同。
为此,我尝试将以下内容设置到我的 imageview
<ImageView
android:layout_width = "400dp"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:adjustViewBounds="true"/>
此方法的问题是滚动 ListView 时会出现很多闪烁,因为事先不知道 ImageView 的高度,并且必须先使用我的宽度缩放图像以计算每个图像相对于这是纵横比。
如何预先计算每个图像的高度而不是让 imageview 处理它?</p>
如果我有一个 400 X 700 的图像,并且我希望 imageview 的宽度为 300px,我如何使用我的图像尺寸计算 imageview 的高度并保持图像纵横比?这有助于避免在滚动 ListView 时出现闪烁。
最佳答案
出现这种闪烁的原因是,在 ListView 中,列表项被重复使用。重新使用时,列表项中的 ImageView 保留首先显示的旧图像引用。稍后,一旦下载了新图像,它就会开始显示。这会导致闪烁行为。 为避免此闪烁问题,请在重新使用 ImageView 时始终清除旧图像引用。
在您的情况下,在 holder = (ViewHolder) convertView.getTag();
之后添加 holder.image.setImageBitmap(null);因此,您的 getView() 方法将如下所示:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
...
if (convertView == null) {
LayoutInflater inflater = getLayoutInflater();
convertView = inflater.inflate(viewResourceId, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
holder.image.setImageBitmap(null)
}
...
return convertView;
}
关于android - 如何避免 ListView 中的图像闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36013709/