Meilleure façon d'afficher l'image dans l'affichage de la grille est de défilement lisse

Tout d'abord, j'ai déjà fait quelques choses pour afficher l'image en gridview faire en douceur lors du défilement

1. charger une image à partir d'internet sur le thread d'arrière-plan

AsyncTask acyncTask ;
HandlerThread handlerThread ;

 URL imageUrl = new URL(link);<br>
            HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);
            conn.setInstanceFollowRedirects(true);
            InputStream is=conn.getInputStream();
            final Bitmap bitmap = BitmapFactory.decodeStream(is);

2. faire bitmap à la taille de l'échantillon pour économiser de la mémoire

final BitmapFactory.Options option = new BitmapFactory.Options();
    option.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(mFile.getPath(),
            option);
    option.inSampleSize = calculateInSampleSize(option , mSize , mSize);
    option.inJustDecodeBounds = false;
    option.inPurgeable = true ;
    option.inDither = false ;
    option.inScaled = false ;
    option.inPreferredConfig = Bitmap.Config.ARGB_8888;

3. faire un cache pour enregistrer décodé bitmap

LruCache lruCache = new LruCache<String , Bitmap>();

dans baseadapter getView();
Je vais lruCache.get(key) de prendre la décodé bitmap

4. lazy load lorsque bitmap décodé par gestionnaire

 Handler handler = new Handler();
        handler.post(new Runnable(){
           public void run(){
              imageView.setimageBitmap(bitmap);
          }
      });

Maintenant, je suis confronté à un gros problème, il accusent encore un peu quand je suis défilement
j'ai google à propos de quelque chose peut faire la défilement mieux, je ne sais pas vraiment quelque chose à améliorer ou le problème est de sortir de l'endroit où je l'ai vérifier pour chaque getView() ne passent que moi sur 2~6ms et il va appeler mon code pour chargement asynchrone la forme d'une image thread de travail, donc je ne sais pas vraiment pourquoi certaines applications peuvent chargement très lisse? mon cas est lors du défilement l'écran ne sera pas ressembler à très lisse, c'est une suggestion peut-elle s'appliquer?

édité : quand je suis défilement , le bitmap trouvé dans le cache et l'affichage sur l'écran , si je défilement rapide , il ressemblera à aucun défilement suffit à montrer l'image , il ne me faites défiler jusqu'pas si lisse , même moi j'ai du cache vers le bas de l'image bitmap dans le cache

voici le code d'adaptateur :

if (convertView == null) {
        convertView = layoutInflater.inflate(
                R.layout.row_display_image_grid, null);
        viewHolder = new DisplayImageGridViewHolder();
        viewHolder.background = (RelativeLayout) convertView
                .findViewById(R.id.background);
        viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
        viewHolder.text = (TextView) convertView.findViewById(R.id.text);
        viewHolder.position = position;
        viewHolder.text.setEllipsize(TruncateAt.END);
        viewHolder.text.setTypeface(typeFace);
        viewHolder.image.setOnClickListener(this);
        viewHolder.image.setOnLongClickListener(this);
        convertView.setTag(viewHolder);
    } else {
        viewHolder = (DisplayImageGridViewHolder) convertView.getTag();
    }

viewHolder.position = position;
imageLoader.loadImage(imageLinkList.get(position), viewHolder.image);
return convertView;
Vous pouvez poster votre carte de code, plus précisément le getView (). Qui est le plus probable, où le défilement du gal sera en venir.
ont ajouté , je viens de l'appeler une méthode pour démarrer le chargement la tâche à un thread de travail , j'ai vérifier, avant et après cette méthode getview , il n'passer mon fews moulins secondes , pensez-vous setimagebitmap est quelque chose de problème lors du défilement gridview
Votre code est encore un peu floues. Vous pouvez poster votre ensemble de la classe ImageLoader. J'utilise très semblable code, éventuellement en se basant sur le même exemple et avoir de travail sans retard.
oh je vois , vous êtes à l'aide de celui, similaire , que diriez-vous comment faire pour afficher l'image sur gridview ?? si vous faites défiler rapide , est un peu gal ?? je viens de changer le montrant bitmap méthode de runonuithread de gestionnaire postdelayed , le reste est de même .
Je viens de l'utiliser AsyncTasks pour charger les images. Charger l'image à partir du web / local de stockage / mémoire doInBackground. Ensuite, réglez l'image en onPostExecute.

OriginalL'auteur rex | 2012-04-25