Mon application contient un listview qui peut éventuellement contenir des images d'une carte SD d'utilisateur. Cela fonctionne bien cependant quand n'importe quelle image est chargée, il y a un décalage notable. J'ai ceci dans mon getView:Android listview image lag
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(image, o);
final int REQUIRED_SIZE=70;
//Find the correct scale value. It should be the power of 2.
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale=1;
while(true){
if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
break;
width_tmp/=2;
height_tmp/=2;
scale++;
}
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
Bitmap myBitmap = BitmapFactory.decodeFile(image, o2);
image_main.setImageBitmap(myBitmap);
Des suggestions?
EDIT: Remplacée ci-dessus avec cela, mais pas chargement des images ...
class Thumbnailer extends AsyncTask<String, Void, Bitmap> {
String image;
@Override
protected void onPostExecute(Bitmap result) {
image_main.setImageBitmap(result);
}
@Override
protected void onProgressUpdate(Void... progress) {
}
@Override
protected Bitmap doInBackground(String... params) {
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeFile(image, o);
final int REQUIRED_SIZE=70;
//Find the correct scale value. It should be the power of 2.
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int scale=1;
while(true){
if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
break;
width_tmp/=2;
height_tmp/=2;
scale++;
}
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeFile(image, o2);
}
}
new Thumbnailer().execute(image);
Merci pour la réponse..J'essaie avec AsyncTask mais je n'arrive pas à le faire fonctionner..J'ai mis à jour mon 1er message pour vous montrer ce que j'ai fait. Je n'ai jamais joué avec AsyncTask donc je peux le faire incorrectement. Je suis à peu près débutant ici;) – Paul
@ Paul: Il est difficile d'aider les gens qui refusent de dire ce que "ne peut pas le faire fonctionner" signifie. Autant que je sache, vous essayez de charger chaque image dans un seul widget 'ImageView', ce qui semble peu probable. Vous devez passer dans 'AsyncTask' le' ImageView' pour la ligne que vous traitez avec cette tâche particulière. – CommonsWare
Je pense que le problème est que je n'utilise pas la chaîne d'image que je passe à l'inBackground – Paul