Как получить Arraylist <Bitmap>на выходе с помощью Glide? - PullRequest
0 голосов
/ 20 января 2019

enter image description here На этом изображении показан текущий вывод, который перемешан и дублирован.

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

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

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

Версия 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();
        }
    });
}  

Now метод для загрузки изображений .....

 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 растровых изображений с дубликатом каждого значения

Ответы [ 2 ]

0 голосов
/ 26 января 2019

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

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();

}

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

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;
    }
}
0 голосов
/ 22 января 2019

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

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...