Как получить Arraylist<Bitmap> в качестве вывода с помощью Glide?

Как получить Arraylist&lt;Bitmap&gt; в качестве вывода с помощью Glide? На этом изображении показан текущий вывод, который перемешивается и дублируется.

У меня есть пути к mp3-файлам arraylist, я хочу извлечь из них миниатюры, он отлично работает с Первым кодом растрового изображения, но скорость извлечения слишком низкая.

filterpath==путь к файлам MP3.

MEDIACOVER==Список массивов для хранения растровых изображений.

Версия Glide==com.github.bumptech.glide:glide:4.8.0, я думаю, что это последняя версия Glide.

public class Main2Activity extends AppCompatActivity {
private ArrayAdapter<Bitmap> adp;
ListView lv;
ArrayList<String> path;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);
    path=new ArrayList<>();
    lv=findViewById(R.id.chckimage);
    Intent in=getIntent();
    path=in.getStringArrayListExtra("path");
    adp = new ArrayAdapter(Main2Activity.this, 
    android.R.layout.simple_list_item_1);
    lv.setAdapter(adp);
    loadArrayList(path);
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int 
         position, long id) {
            ImageView iv=findViewById(R.id.getting);
            iv.setImageBitmap(adp.getItem(position));
            Toast.makeText(Main2Activity.this, ""+adp.getItem(position), 
         Toast.LENGTH_LONG).show();
        }
    });
}  

Теперь способ загрузки изображений.....

 public void loadArrayList(ArrayList<String> Path) {
    try {
        for(String temp:Path){
            MediaMetadataRetriever mmr = new MediaMetadataRetriever();
            mmr.setDataSource(temp);
            byte[] data = mmr.getEmbeddedPicture();
            if (data != null) {
                Glide.with(this)
                        .asBitmap()
                        .load(data)
                        .thumbnail(0.1f)
                        .apply(RequestOptions.circleCropTransform()) //------getting image in circle
                        .listener(new RequestListener<Bitmap>() {
                            @Override
                            public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                                return false;
                            }

                            @Override
                            public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                                adp.add(resource);
                                return true;
                            }
                        }).submit();
                mmr.release();
            }else{

                   //LOAD FROM DRAWABLE
            }

        }
    } catch (Exception e){}
}  

Здесь я использовал imageview для проверки, теперь он дает другие ошибки, такие как дублирует значения, а также перемешивает их пути

Я хочу получить общее количество изображений из полных путей в массиве

Я получаю эти результаты, запуская одно и то же приложение... и размер массива путей составляет всего 5. Но это дает мне вывод 10 растровых изображений с дубликатом каждого значения

Комментарии не для расширенного обсуждения; этот разговор был перешел в чат.

Samuel Liew 22.01.2019 09:50
1
1
861
2

Ответы 2

попробуйте изменить метод скольжения с асинхронного на синхронный.

public ArrayList<Bitmap> getArrayList(ArrayList<String> Path) {
    try {
        arrayList=new ArrayList<>();
        for(String temp:Path){
            MediaMetadataRetriever mmr = new MediaMetadataRetriever();
            mmr.setDataSource(temp);
            byte[] data = mmr.getEmbeddedPicture();
            if (data != null) {
                FutureTarget<Bitmap> submit = Glide.with(this)
                        .asBitmap()
                        .load(data)
                        .thumbnail(0.1f)
                        .apply(RequestOptions.circleCropTransform()) //------getting image in circle
                        .submit();
                button.setImageBitmap(submit.get());
                arrayList.add(submit.get());
                mmr.release();
            }else{
                Bitmap bitmap=BitmapFactory.decodeResource(this.getResources(),
                        R.drawable.example_picture);
                arrayList.add(bitmap);
                mmr.release();
            }

        }
    } catch (Exception e){
    }
    return arrayList;
}

этот метод не работает, приятель, он ничего не показывает ни в массиве, ни в изображении.

Vipul Chauhan 22.01.2019 07:45

Теперь я нашел ответ на свой вопрос и хочу помочь другим не застрять в этой же проблеме...

public class GlideBitmap extends AppCompatActivity {
MediaMetadataRetriever mmr;
byte[] data;
ArrayList<Bitmap> BMP;
ListView listView;
Bitmap bitmap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_glide_bitmap);
    listView=findViewById(R.id.bitmap);
    BMP=new ArrayList<>();
    try {
        gettingData();
    } catch (ExecutionException e) {
        e.printStackTrace();
        Toast.makeText(this, ""+e.toString(), Toast.LENGTH_SHORT).show();
    } catch (InterruptedException e) {
        e.printStackTrace();
        Toast.makeText(this, ""+e.toString(), Toast.LENGTH_SHORT).show();
    }
//Here Toast is used to check the size of arraylist that 
//is it equal to path list or not.
    int size=BMP.size();
    Toast.makeText(this, ""+size, Toast.LENGTH_SHORT).show();

}

Теперь давайте посмотрим на основной метод этого ответа...

public ArrayList<Bitmap> gettingData() throws ExecutionException, InterruptedException {
     mmr=new MediaMetadataRetriever();
                 for(String temp:MainActivity.path){
                     mmr.setDataSource(temp);
                     data=mmr.getEmbeddedPicture();

                                 if (data!=null){
                                     Glide.with(this)
                                                         .asBitmap()
                                                         .load(data)
                                                         .listener(new RequestListener<Bitmap>() {
                                                             @Override
                                                             public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                                                                 return false;
                                                             }

                                                             @Override
                                                             public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                                                                 bitmap=resource;
                                                                 return false;
                                                             }
                                                         }).submit();
                                     BMP.add(bitmap);
                                     bitmap=null;

                                 }else{
                                     Glide.with(this)
                                             .asBitmap()
                                             .load(R.drawable.example_picture)
                                             .listener(new RequestListener<Bitmap>() {
                                                 @Override
                                                 public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) {
                                                     return false;
                                                 }

                                                 @Override
                                                 public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) {
                                                     bitmap=resource;
                                                     return false;
                                                 }
                                             }).submit();
                                     BMP.add(bitmap);
                                     bitmap=null;
                                 }
                 }
       return BMP;
    }
}

Другие вопросы по теме