Во-первых, я уже сделал несколько вещей для отображения изображения в gridview, чтобы сделать его плавным при прокрутке
1. загрузить изображение из Интернета в фоновом потоке
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. сделать растровое изображение до размера образца для сохранения память
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. сделать кэш для сохранения декодированного растрового изображения
LruCache lruCache = new LruCache<String, Bitmap>();
в baseadapter getView();
Я буду lruCache.get(key)
брать декодированное растровое изображение
4. ленивая загрузка, когда растровое изображение декодируется через обработчик
Handler handler = new Handler();
handler.post(new Runnable(){
public void run(){
imageView.setimageBitmap(bitmap);
}
});
Теперь я столкнулся с большой проблемой, оно все еще немного отстает при прокрутке у меня есть google о чем-то, что может улучшить прокрутку , не знаю, действительно ли что-то может улучшиться, или проблема возникает из-за того, что у меня есть проверка для каждого getView (), только потратьте меня на 2 ~6 мс , и он вызовет мой код для асинхронной загрузки рабочего потока формы изображения , поэтому я действительно не знаю, почему некоторые приложения могут загружаться очень плавно ? мой случай при прокрутке экран не будет выглядеть очень гладким, можно применить какое-то предложение?
отредактировано :когда я прокручиваю, растровое изображение находится в кеше и отображается на экране, если я быстро прокручиваю, это будет выглядеть так, что прокрутки недостаточно для отображения изображения, это сделает мою прокрутку не такой гладкой, даже у меня есть битовая карта в кеше
вот код адаптера:
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;