1

次のコードを使用してサイズ変更されたビットマップを作成しています。コードは問題なく動作しますが、非常に遅いです。問題は、これを複数の画像に使用しようとすると、画像が作成されるまで電話がフリーズすることです。

これが私のコードです:

Bitmap bitmap = null;
File imgFile = new File(my_pic_file);
if(imgFile.exists()) {
  bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
  Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 300, 200, false);
  first_image.setImageBitmap(resizedBitmap);
}
4

1 に答える 1

2

問題は、メインスレッドで作業を行っていることです。これは、すべての処理が完了するまで UI をフリーズさせることを意味します。これは、スレッドまたは非同期タスクを使用して修正できます。

 private class LoadImageTask extends AsyncTask<String, Void, Bitamp> {

 private ImageView mImageView = null;

 public LoadImageTask(ImageView imageView) {

    mImageView = imageView;
 }

 protected Bitmap doInBackground(String... file) {

    Bitmap bitmap = null;
    Bitmap resizedBitmap = null;
    File imgFile = new File(file);
    if(imgFile.exists()) {
      bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
      resizedBitmap = Bitmap.createScaledBitmap(bitmap, 300, 200, false);
    }

    return resizedBitmap;
 }

 protected void onPostExecute(Bitmap result) {
     if (result != null && mImageView != null) {

        mImageView.setImageBitmap(result);
     }
 }

次に、コードで呼び出すだけです

new LoadImageTask(first_image).execute(my_pic_file);
于 2013-10-13T11:19:41.927 に答える