gpt4 book ai didi

java - Android gridview 不维护元素顺序(除非牺牲性能)

转载 作者:行者123 更新时间:2023-11-29 05:38:28 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个画廊,一个包含 ImageView 的 GridView 。代码如下:

public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(LAYOUT_WIDTH, LAYOUT_HEIGHT));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
BitmapFactory.Options o = new BitmapFactory.Options();
o.inSampleSize = 5;
Bitmap previewBitmap = Bitmap.createScaledBitmap(
BitmapFactory.decodeFile(picture_paths[position], o),
LAYOUT_WIDTH,
LAYOUT_HEIGHT,
false);
imageView.setImageBitmap(previewBitmap);
return imageView;
}

当然,它的性能非常糟糕,因为每次绘制元素时都必须调整大小并加载位图。但是,如果我将调整大小代码移动到 if(convertView == null) block 内,则不会保持元素的顺序 - 每个图像都会随着用户在 gridview 中滚动而不断改变位置。

在没有性能问题的情况下执行此操作的正确方法是什么?

最佳答案

每次获取非null的convertView,都需要重新绑定(bind)数据。这意味着您需要在其他地方(在您的适配器中、位图缓存中等)保留对缩放位图的引用

关于java - Android gridview 不维护元素顺序(除非牺牲性能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18602745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com