Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

305
Visualizações
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));
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

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);
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda