2015-04-08 5 views
-1

Я использую GridView для отображения изображений, которые хранятся в устройстве на SD-карте. Когда я просматриваю GridView, прокрутка не является гладкой. Функция GetView из customAdapter выглядит следующим образом:Сетка прокрутки сетки не является гладкой

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = inflater.inflate(R.layout.main_xml, parent, false); 

    ImageView photo= (ImageView) view.findViewById(R.id.gImage); 
    DisplayMetrics displaymetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
    int width = displaymetrics.widthPixels; 
    photo.setLayoutParams(new LinearLayout.LayoutParams(width/2, width/2)); 

    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 2; 
    Bitmap bitmap = BitmapFactory.decodeFile(imageUrls.get(position).getimageUrl(), options); 
    photo.setImageBitmap(bitmap); 

    return view; 
} 

Где ImageUrl является ArrayList из строк, которые являются расположение изображений на карте SD. Также я динамически устанавливаю ширину и высоту ImageView.

+3

, пожалуйста, прочитайте документацию http://developer.android.com/training/displaying-bitmaps/index.html – tyczj

+2

1. вы не используете повторно convertView 2. вы декодируете растровое изображение на главной теме – Selvin

ответ

0

Вы делаете дисковый ввод-вывод в основной прикладной нити в форме своего вызова decodeFile(). Это даст вам проблемы с производительностью.

Существует множество библиотек для загрузки изображений, таких как Picasso и Universal Image Loader. Пожалуйста, используйте один из них. Они будут загружать ваше изображение в фоновом режиме и заполнять ваш ImageView, когда изображение будет готово. Если вы настаиваете на том, чтобы скопировать свой собственный код для этого, используйте AsyncTask или другую фоновый поток для вашего ввода/вывода на диске.

Помимо этого, как отмечает Selvin в комментариях, обратите внимание на параметр convertView на getView() и не слепо раздувайте макет, когда он не нужен.

Смежные вопросы