2016-01-20 4 views
0

Я создаю приложение для проводника файлов, и я пытаюсь загрузить большое количество изображений (более 5000 ...), я пытаюсь использовать picasso, но его все еще медленно, поэтому я пытаюсь загрузить Thumbimage с Picasso и не файл весь образ ..Загрузить растровое изображение с picasso в ImageView

.... 
    ImageItem item = data.get(position); 
    ImageView imageView = holder.image; 
    Bitmap ThumbImage = ThumbnailUtils.extractThumbnail(BitmapFactory.decodeFile(item.getImage().getPath()), 100, 100); 
    Picasso.with (context) .load (ThumbImage) .into (imageView); /*/ doesnt work.. cant load ThumbImage with Picasso 
    Picasso.with (context) .load (item.getImage()) .into (imageView); //work, but too slow 

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

+0

- это ваши изображения? – Tasos

+0

Да, от камеры (папка DCIM) – Nirel

+0

, тогда у вас все еще будут проблемы с производительностью. лучше всего создать другое приложение, которое получает все изображения из папки камеры и создает для них большой палец, поэтому у вас будет 2 изображения. маленький и большой. Затем в приложении, с которым вы работаете, теперь загружаются в маленькие из папки камеры. или объединить 2 в одно приложение, но я предлагаю создать большой палец для всех изображений навсегда в папке камеры. – Tasos

ответ

1

Сначала я бы рекомендовал использовать RecyclerView вместо GridView, учитывая, что он обрабатывает много управления памятью для вас. Вместо того, чтобы загружать все изображения сразу (или управлять ими самостоятельно), он загружает только изображения, которые поместились на экране. И вы можете использовать GridLayoutManager, чтобы он отображался точно так же, как в GridView.

RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recycler); 
recyclerView.setLayoutManager(new GridLayoutManager(context, 4); 
recyclerView.setAdapter(new MyRecyclerViewAdapter(context, data); 

Кроме того, пусть Пикассо ручку преобразующий изображение для вас, так что вам не нужно использовать ThumbnailUtils. Пикассо обрабатывает изменение размеров изображений и управление памятью с функцией resize():

String uri = data.get(position); 

Picasso.with(context).load(new File(uri)).resize(100, 100) 
    .centerCrop().into(imageView) 

Вы можете сделать это в onBindViewHolder() способе RecyclerView.Adapter так, что каждое изображение будет загружено только тогда, когда View должен быть показан.

Я не знаю, как вы получения изображений в настоящее время, но если вы не знаете, как получить URI изображения, это должно работать:

String[] projection = {"*"}; 

List<String> data = new ArrayList<>(); 

Cursor cursor = context.getContentResolver().query(
     MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null, null, null); 

if(cursor.moveToFirst()) { 
    do { 
     data.add(cursor.getString(cursor 
         .getColumnIndex(MediaStore.Images.Media.DATA))); 
    } while(cursor.moveToNext()); 
} 

Я не знаю, если это устранит проблему, с которой вы столкнулись с Picasso, не загружая изображения, но если она не отправляет трассировку стека, и мы можем попытаться понять это.