Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

304
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!