En primer lugar, ya he hecho algunas cosas para mostrar la imagen en gridview hacer suave cuandomejor manera de mostrar la imagen en la vista de cuadrícula es el desplazamiento suave
1. Imagen de carga desplazándose desde Internet en subproceso de fondo
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. maquillaje de mapa de bits tamaño de la muestra para ahorrar 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. Haga una memoria caché de mapa de bits decodificado para salvar
LruCache lruCache = new LruCache<String , Bitmap>();
en baseadapter getView();
voy a lruCache.get(key)
tomar el mapa de bits decodificado
4. carga perezosa a través de mapa de bits decodificado manejador
Handler handler = new Handler();
handler.post(new Runnable(){
public void run(){
imageView.setimageBitmap(bitmap);
}
});
Ahora estoy enfrentando un gran problema, todavía me queda un poco cuando estoy desplazándome tengo google sobre algo que puede hacer que se desplace mejor, no sé si realmente algo puede mejorar o si el problema se presenta desde donde tengo control para cada getView() solo me gasta aproximadamente 2 ~ 6ms y lo hará llamar a mi código a async cargando la imagen del hilo de trabajo, así que realmente no sé por qué algunas aplicaciones pueden cargar muy suave? mi caso es cuando se desplaza, la pantalla no se verá muy suave ¿se puede aplicar alguna sugerencia?
editado: cuando estoy desplazándome, el mapa de bits se encuentra en la caché y se muestra en la pantalla, si me desplazo rápidamente, parecerá que no hay desplazamiento suficiente para mostrar la imagen, hará que mi desplazamiento no sea tan uniforme, incluso tienen caché por el mapa de bits en caché
aquí es el código de adaptador:
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;
Puede publicar su código de adaptador, específicamente el método getView().Es más probable de donde vendrá el desfase de desplazamiento. –
he agregado, simplemente llamo a un método para iniciar la tarea de carga en un subproceso de trabajo, tengo verificación antes y después de este método de getview, solo gasta mis pocos segundos, ¿piensas que setimagebitmap es un problema al desplazar a gridview – rex
Tu código todavía no está claro. ¿Puedes publicar toda tu clase de ImageLoader? Estoy usando un código muy similar, posiblemente basado en el mismo ejemplo y lo tengo trabajando sin retraso. –