Après beaucoup de tentatives grâce à tous les passionnés d'Android, j'ai trouvé une méthode pour gérer efficacement les grandes images dans les applications Android afin de se débarrasser de outOfMemory erreur. Mais je vraiment besoin de savoir est-ce la manière formelle correcte de le faire. ou Ai-je besoin d'ajouter un peu plus ou tout changement devrait être fait. S'il vous plaît commentaire.Est-ce la bonne façon de gérer efficacement les grandes images (pour éviter outOfMemoryErrorin Android
Bitmap bitmap1;
iv1 = (ImageView) findViewById(R.id.iv1);
iv2 = (ImageView) findViewById(R.id.iv2);
iv3 = (ImageView) findViewById(R.id.iv3);
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.drawable.image1);
BitmapFactory.decodeResource(getResources(), R.drawable.image2);
BitmapFactory.decodeResource(getResources(), R.drawable.image3);
int srcWidth = o.outWidth;
int srcHeight = o.outHeight;
int dstWidth = 600;
int dstHeight = 450;
int inSampleSize = 1;
if (srcHeight > dstHeight || srcWidth > dstWidth) {
final int halfHeight = srcHeight/2;
final int halfWidth = srcWidth/2;
while ((halfHeight/inSampleSize) > dstWidth
&& (halfWidth/inSampleSize) > dstWidth) {
inSampleSize *= 2;
}
}
o.inSampleSize = inSampleSize;
o.inJustDecodeBounds = false;
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.image1, o);
iv1.setImageBitmap(bitmap1);
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.image2, o);
iv2.setImageBitmap(bitmap1);
Toast.makeText(getApplicationContext(),
"DEcoded", Toast.LENGTH_LONG).show();
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.image3, o);
iv3.setImageBitmap(bitmap1);
@Override
protected void onDestroy() {
bitmap1.recycle();
super.onDestroy();
Toast.makeText(getApplicationContext(),
"Bitmap Destroyed", Toast.LENGTH_LONG).show();
}
essayez ici http://codereview.stackexchange.com/ ... mais d'abord pensé que WTF ces lignes font 'BitmapFactory.decodeResource (getResources(), R.drawable.image1 à 2);' Savez-vous que dans 'o.outWidth' est seulement la largeur de la dernière image (image3)? – Selvin
Je n'ai pas compris votre point. Pourriez-vous s'il vous plaît expliquer plus en détail. Merci. –