Prima di tutto, ho già fatto alcune cose da mostrare un'immagine in GridView rendere liscia quando si scorreIl modo migliore per visualizzare l'immagine in vista griglia scorre liscia
1. caricare l'immagine da internet su thread in background
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. make bitmap alle dimensioni del campione per risparmiare memoria
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. fare una cache per salva decodificato bitmap
LruCache lruCache = new LruCache<String , Bitmap>();
in baseadapter getView();
mi lruCache.get(key)
di prendere l'immagine bitmap decodificata
4. carico pigro quando bitmap decodificata attraverso gestore
Handler handler = new Handler();
handler.post(new Runnable(){
public void run(){
imageView.setimageBitmap(bitmap);
}
});
Ora sto affrontando un grosso problema, è ancora in ritardo quando sto scorrendo ho google su qualcosa può fare lo scrolling meglio, non so davvero qualcosa può migliorare o il problema è venuto fuori da dove ho controllo per ogni getView() mi spendo solo su 2 ~ 6ms e lo farò chiama il mio codice a async caricando il thread di lavoro modulo immagine, quindi davvero non so perché alcune applicazioni possono caricare molto liscio? il mio caso è quando si scorre lo schermo non sembra molto fluido è qualche suggerimento può applicare?
modificato: mentre faccio scorrere, la bitmap trovato nella cache e la visualizzazione sullo schermo, se ho veloce scorrimento, apparirà come nessun scorrimento abbastanza per mostrare l'immagine, farà il mio scorrimento non così liscio, anche io avere la cache lungo il bitmap nella cache
qui è il codice dell'adattatore:
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;
Puoi pubblicare il tuo codice adattatore, in particolare il metodo getView().Questo è molto probabilmente da dove verrà il ritardo di scorrimento. –
hanno aggiunto, ho appena chiamato un metodo per avviare l'attività di caricamento su un thread di lavoro, ho controllo prima e dopo questo metodo getview, spendo solo pochi millesimi secondi, pensi che setimagebitmap è qualcosa di problema quando si scorre gridview – rex
Il tuo codice è ancora un po 'poco chiaro. Puoi pubblicare la tua intera classe ImageLoader. Sto usando un codice molto simile, probabilmente basato sullo stesso esempio e funziona senza alcun ritardo. –