На этом изображении показан текущий вывод, который перемешивается и дублируется.
У меня есть пути к 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 растровых изображений с дубликатом каждого значения
попробуйте изменить метод скольжения с асинхронного на синхронный.
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;
}
этот метод не работает, приятель, он ничего не показывает ни в массиве, ни в изображении.
Теперь я нашел ответ на свой вопрос и хочу помочь другим не застрять в этой же проблеме...
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;
}
}
Комментарии не для расширенного обсуждения; этот разговор был перешел в чат.