ListView с картинками тормозит во время скроллинга

Интерфейс, диалоги, темы, стили, меню
Ответить
drakaris
Сообщения: 9
Зарегистрирован: 17 окт 2013, 12:20

ListView с картинками тормозит во время скроллинга

Сообщение drakaris » 03 дек 2013, 19:49

Добрый день!
В приложении мне необходимо скачивать из сервера изображения, а потом отображать их вместе с текстом в ListView.
Изображения хранятся в памяти, а в базе данных хранятся только их адреса. Для работы ListView я создал класс, в котором переопределил SimpleCursorAdapter.
Все нормально: картинки и нужная инфа отображается, но вот при прокрутке такого списка начинается дико торможение. Как я предполагаю, это связано с тем, что при переотрисовке элемента списка приложение заново обращается к базе данных, получает путь к фалу изображения, а затем грузит картинку.
А возможно это зависит от размера изображения? Помогите пожалуйста советом, как можно это оптимизировать
Вот кусок из моего переопределенного SimpleCursorAdapter-a

Код: Выделить всё

@Override
	 public void bindView(View view, Context context, Cursor cursor) {
		
		int id = cursor.getInt(cursor.getColumnIndex(this.VID_COLUMN));
		String title = cursor.getString(cursor.getColumnIndex(this.TITLE_COLUMN));
		String dateOf = cursor.getString(cursor.getColumnIndex(this.DATE_COLUMN));
		
		TextView titleView = (TextView) view.findViewById(R.id.news_item_header);
		titleView.setText(title);
		
		TextView dateItem = (TextView) view.findViewById(R.id.news_item_date);
		dateItem.setText(dateOf);
	 
		Cursor imagesCur = this.sqlClient.getImages(id);
		int columnIndex = imagesCur.getColumnIndex("image_path");
		// Если есть картинка для новости - показываем ее
		if (imagesCur.moveToFirst() && imagesCur.getCount() !=0 ){
			// Получаю путь для картинки из базы данных
			String imgPath = imagesCur.getString(columnIndex);
			
			File myImage = new File(imgPath);
			// Получаю битмап
			Bitmap myBitmap = BitmapFactory.decodeFile(myImage.getAbsolutePath());
			ImageView img = (ImageView) view.findViewById(R.id.previewImg);
			// Устанавливаю его в качестве содержимого ImageView
			img.setImageBitmap(myBitmap);
		}
	 }
И вот еще вопрос: это нормально, что метод BitmapFactory.decodeFile(путь к изображению); тормозит работу приложения?

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: ListView с картинками тормозит во время скроллинга

Сообщение rezak90 » 03 дек 2013, 23:55

drakaris писал(а):Как я предполагаю, это связано с тем, что при переотрисовке элемента списка приложение заново обращается к базе данных
нет
drakaris писал(а):А возможно это зависит от размера изображения?
да
Если картинка большая (разрешение) то её нужно скейлить, если и так будет тупить то скейлить в отдельном потоке
R.id.team
Политика на форуме запрещена

drakaris
Сообщения: 9
Зарегистрирован: 17 окт 2013, 12:20

Re: ListView с картинками тормозит во время скроллинга

Сообщение drakaris » 04 дек 2013, 13:21

Спасибо за помощь. Реализовал все в отдельном потоке. Также, может кому пригодится: вот еще инфа о том, как сделать так,чтобы ListView скроллился плавно: http://developer.android.com/training/i ... #AsyncTask

Ответить