0

私が持っているもの

アクティビティに「画像ダイアログを開く」があります。この「ダイアログ」には、フォルダと互換性のある画像のみが表示されます。このために、画像とテキストを含む行で埋めるグリッドビューのあるレイヤーがあります。

テキストはファイル名用で、画像は画像のプレビュー用です。

私の問題

私が見ているフォルダにたくさんの画像がない場合、ダイアログはうまく機能します。私はSIIに取り組んでおり、カメラアルバム(8Mpxの写真)を開こうとすると、新しい行が再描画されるたびに、コードが非常に遅くなります。

私のコード

この部分を削除するとすべて正常に機能するため、主な問題はプレビュー画像の作成にあると思います。画像については、私は持っています:

  @Override
public View getView(int position, View convertView, ViewGroup parent) {
   View grid;

   if(convertView==null){
       grid = new View(mContext);
       LayoutInflater inflater=getLayoutInflater();
       grid=inflater.inflate(R.layout.row, parent, false);
   }else{
       grid = (View)convertView;
   }

   ImageView icon = (ImageView)grid.findViewById(R.id.file_image);
   TextView label = (TextView)grid.findViewById(R.id.file_text);
   label.setText(item.get(position));
    if (item.get(position).equals("/")){
        icon.setImageResource(R.drawable.folderupup);
    }else if (item.get(position).endsWith("../")) {
        icon.setImageResource(R.drawable.folderup);
    }else if (item.get(position).endsWith("/")) {    
        icon.setImageResource(R.drawable.folder);
    }else{
        Bitmap b = BitmapFactory.decodeFile(path.get(position));
        Bitmap b2 = Bitmap.createScaledBitmap(b, 55, 55, false);
        icon.setImageBitmap(b2);
    }

   return grid;
  }
 }
4

2 に答える 2

0

どこかで、コードはこれを呼び出します (データはイメージのフルパス名です):

DiskLruCache.Editor editor = mHttpDiskCache.edit(key);
if (editor != null) {
       if (downloadUrlToStream(data,editor.newOutputStream(DISK_CACHE_INDEX))) {
             editor.commit();
       } else {
             editor.abort();
       }
}

変更方法がわからないため、URL 受容体を変更したので、ネットから読み取る代わりに、ファイルから読み取ります。

    public boolean downloadUrlToStream(String urlString, OutputStream outputStream) {
        disableConnectionReuseIfNecessary();
        HttpURLConnection urlConnection = null;
        BufferedOutputStream out = null;
        BufferedInputStream in = null;

        try {

            in = new BufferedInputStream(new FileInputStream(new File(urlString)), IO_BUFFER_SIZE);
            out = new BufferedOutputStream(outputStream, IO_BUFFER_SIZE);

            int b;
            while ((b = in.read()) != -1) {
                out.write(b);
            }
            return true;
        } catch (final IOException e) {
            Log.e(TAG, "Error in downloadBitmap - " + e);
        } finally {
            if (urlConnection != null) {
                urlConnection.disconnect();
            }
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (final IOException e) {}
        }
        return false;
    }

しかし、グリッドビューは画像の読み込みが非常に遅くなります。最後の方法だからだと思います。どうすればもっとうまくできますか?

于 2012-10-10T23:40:30.177 に答える
0

最後に、キャッシュに対して何もせずに、Android ページが言ったことをすべて実行しました。リストの読み込みが高速になりました。Wenhuiが指摘したようにメモリキャッシュを追加できるかもしれませんが、それは非常に高速であるため、私の目的には関係ありません。

テストは、8Mpx で約 400 個のフォルダーを含む SII で行われました。

于 2012-10-18T12:42:26.153 に答える