Мне нужно загрузить ресурсы VectorDrawable в зависимости от разных случаев в просмотры изображений в режиме ресайклера. Текущая реализация каждый раз создает новую возможность рисования, что, я уверен, приводит к потере производительности с огромным количеством элементов в списке. Я хочу изменить его, чтобы чертежи эффективно использовались повторно для уменьшения количества создаваемых объектов. Я использую Picasso, и я подумал, что было бы неплохо делегировать ему эту работу, но похоже, что Picasso не может загрузить VectorDrawable. Есть ли способ справиться с этим?
UPD. Ресурс загружается с помощью ContextCompat.getDrawable и устанавливается с помощью setImageDrawable. ImageView drawable очищается в onViewRecycled
@KaveeshKanwal, кода не так много. Ресурс загружается с помощью ContextCompat.getDrawable и устанавливается с помощью setImageDrawable. Возможность рисования ImageView очищена в onViewRecycled. Дело в том, что ContextCompat.getDrawable вызывается каждый раз, что приводит к построению объекта.
Я хочу знать, есть ли способ кэшировать чертежи во всем приложении для последующего использования.
Единственное решение, которое я могу придумать, - это переместить загрузку динамических изображений с возможностью рисования из потока пользовательского интерфейса в фоновый поток. Чтобы сделать загрузку более плавной, вам необходимо загружать изображения асинхронно, используя AsyncTask в вашем адаптере. Это снимет нагрузку с потока пользовательского интерфейса и сделает работу пользователя намного лучше. Вы не можете использовать Picasso, поэтому я рекомендую простую AsyncTask.
Я нашел для этого хороший фрагмент, посмотрите:
public View getView(int position, View convertView,
ViewGroup parent) {
ViewHolder holder;
...
holder.position = position;
new ThumbnailTask(position, holder)
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
return convertView;
}
private static class ThumbnailTask extends AsyncTask {
private int mPosition;
private ViewHolder mHolder;
public ThumbnailTask(int position, ViewHolder holder) {
mPosition = position;
mHolder = holder;
}
@Override
protected Cursor doInBackground(Void... arg0) {
// Download bitmap here
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (mHolder.position == mPosition) {
mHolder.thumbnail.setImageBitmap(bitmap);
}
}
}
private static class ViewHolder {
public ImageView thumbnail;
public int position;
}
Для получения дополнительной информации, пожалуйста, посмотрите ссылку это.
показать код, чтобы увидеть, что вы делаете?