1

私のアプリケーションには、ギャラリー、イメージビューを含むグリッドビューがあります。コードは次のとおりです。

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) ブロック内に移動すると、要素の順序が維持されません。ユーザーがグリッドビューをスクロールすると、すべての画像の位置が常に変化します。

パフォーマンスの問題を起こさずにこれを行う適切な方法は何ですか?

4

1 に答える 1