Загрузка приложения из галереи Android очень медленная
Я хочу создать приложение Галерея, которое берет список фотографий из моей папки и отображает их на одной странице.
Я уменьшил разрешение изображения, чтобы галерея загружалась быстрее, но загрузка все равно занимает так много времени.
Я думаю, проблема в том, что каждый файл загружается каждый раз, когда приложение открывается. Как я могу решить это?
Я использовал Gridview в приложении.
Мой код:
final GridView[] grid = new GridView[1];
final File[] files = fileOps.getGoodFiles();
//this will return the array of files (images) to be displayed
final CustomGrid adapter = new CustomGrid(GeoGallery.this,files);
grid[0] =(GridView)findViewById(R.id.grid);
grid[0].setAdapter(adapter);
В моем CustomGridView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View grid;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
grid = inflater.inflate(R.layout.grid_single, null);
ImageView imageView = (ImageView)grid.findViewById(R.id.grid_image);
Bitmap bitmap = BitmapFactory.decodeFile(files[position].getPath());
bitmap = Bitmap.createScaledBitmap(bitmap,120,120*bitmap.getHeight()/bitmap.getWidth(),false);
imageView.setImageBitmap(bitmap);
return grid;
}
Как я могу заставить его загружаться быстрее?
1 ответ
1) Вы должны использовать GridLayoutManager с RecyclerView. Здесь вы можете получить некоторую помощь.
2) Если я не ошибаюсь, вы загружаете полные изображения, а затем сжимаете их. Вы должны использовать BitmapFactory.Options для загрузки сжатого изображения.
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap b = BitmapFactory.decodeFile(filepath[position], options);
3) Операции, такие как загрузка и управление изображениями, очень дороги. Поэтому поместите их в поток в вашем методе onBindViewHolder
final int pos = position;
Thread thread = new Thread() {
@Override
public void run() {
try {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap b = BitmapFactory.decodeFile(filepath[pos], options);
holder.imageView.setImageBitmap(b)
} catch (Exception e)
}
}
};
Это повысит производительность вашей галереи.