• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

265
Vistas
Vista del reciclador con deslizamiento

Me enfrento a los siguientes problemas con el código dado:

  1. Las imágenes se recargan cuando me desplazo hacia atrás en la vista del reciclador
  2. Se cargan miniaturas incorrectas (siguen cambiando cuando me desplazo hacia adelante y hacia atrás)
  3. La interfaz de usuario se cuelga (intenté enhebrar pero el problema sigue ahí)

Estos problemas no están presentes para los archivos de video (de lo contrario, forman parte del if externo)

Adaptador de vídeo interior:

 if(videoFiles.get(position).getType().equals(MediaStore.Files.FileColumns.MEDIA_TYPE_AUDIO+"")){ if(coverpicture(videoFiles.get(position).getPath())!=null) { Glide.with(mContext) .load(coverpicture(videoFiles.get(position).getPath())) .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(circularProgressDrawable) .into(holder.thumbnail); } else { Glide.with(mContext) .load(new File(videoFiles.get(position).getPath())) .placeholder(R.drawable.ic_baseline_music_note) .into(holder.thumbnail); } } else { Glide.with(mContext) .load(new File(videoFiles.get(position).getPath())) .placeholder(circularProgressDrawable) .into(holder.thumbnail); }

Así es como llamo videoadapter:


 videoAdapter = new VideoAdapter(getActivity(),videoFiles);

La imagen de portada de la función:

 private Bitmap coverpicture(String path) { final MediaMetadataRetriever[] mr = new MediaMetadataRetriever[1]; final byte[][] byte1 = new byte[1][1]; Thread ttt = new Thread(){ @Override public void run() { super.run(); mr[0] = new MediaMetadataRetriever(); mr[0].setDataSource(path); byte1[0] = mr[0].getEmbeddedPicture(); mr[0].release(); } }; ttt.start(); while(true){ if(!ttt.isAlive()){ if(byte1[0] != null) { return BitmapFactory.decodeByteArray(byte1[0], 0, byte1[0].length); } else { return null; } } } }

EDITAR: el problema de la miniatura incorrecta se resuelve cuando reemplazo la primera declaración de deslizamiento con

(sería útil que alguien explicara por qué)

 Glide.with(mContext) .load(coverpicture(videoFiles.get(position).getPath())) .diskCacheStrategy(DiskCacheStrategy.ALL) .placeholder(circularProgressDrawable) .into(new DrawableImageViewTarget(holder.thumbnail));
about 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

  1. En onBindViewHolder del adaptador recyclerview, en un subproceso de fondo, cargue primero las imágenes deslizantes. Luego muéstrelas usando view.post
 new Thread(()->{ Bitmap b =coverpicture(videoFiles.get(position).getPath()); Glide.with(mContext).downloadOnly().load(b); holder.thumbnail.post(() -> { Glide.with(mContext).clear(holder.thumbnail); Glide.with(holder.thumbnail.getContext()) .load(new File(videoFiles.get(position).getPath())) .placeholder(circularProgressDrawable) .format(DecodeFormat.PREFER_RGB_565) .into(new DrawableImageViewTarget(holder.thumbnail)); } }).start();

2 . Ya mencionado en la publicación

3 . Se cambió la imagen de portada () a

 static Bitmap coverpicture(String path) { MediaMetadataRetriever mr; byte[] byte1 = new byte[1]; mr = new MediaMetadataRetriever(); mr.setDataSource(path); try { byte1 = mr.getEmbeddedPicture(); mr.release(); }catch (Exception e){ e.printStackTrace(); } if(byte1 != null) { return BitmapFactory.decodeByteArray(byte1, 0, byte1.length); } else { return null; } }

No es necesario enhebrar dentro de la imagen de portada () , ya que se llama desde un hilo de fondo

TAMBIÉN, las siguientes opiniones optimistas en recyclerview ayudarán

 recyclerView.setHasFixedSize(true); recyclerView.setItemViewCacheSize(20); recyclerView.setDrawingCacheEnabled(true); recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda