私のアプリケーションには、ギャラリー、イメージビューを含むグリッドビューがあります。コードは次のとおりです。
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) ブロック内に移動すると、要素の順序が維持されません。ユーザーがグリッドビューをスクロールすると、すべての画像の位置が常に変化します。
パフォーマンスの問題を起こさずにこれを行う適切な方法は何ですか?