2013-10-13 2 views
1

J'utilise le code suivant pour créer un bitmap redimensionné, le code fonctionne bien, mais il est très lent. Le problème est que lorsque j'essaie d'utiliser ceci pour plus d'une image, le téléphone se bloque jusqu'à ce que les images soient créées.Android, createScaledBitmap lent lors de la création de plusieurs bitmaps

Voici mon code:

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); 
} 

Répondre

2

Le problème est que vous faites le travail sur le thread principal. Cela signifie qu'il va geler l'interface utilisateur jusqu'à ce que tout le traitement est terminé. Vous pouvez résoudre ce problème en utilisant un thread ou une tâche asynchrone.

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); 
    } 
} 

Puis dans votre code il suffit d'appeler

new LoadImageTask(first_image).execute(my_pic_file); 
+0

Merci pour votre réponse, cela semble fonctionner beaucoup mieux! – steo

Questions connexes