Это простая проблема, но мне интересно, есть ли у нее недорогое решение.
У меня есть вид галереи, который загружает изображения из памяти, SD-карты или ресурсов. Их размер 480х800, поэтому код сэмплирует их и отображает в виде миниатюр в виде галереи. Все отлично работает, вроде ...
Некоторые изображения в альбомной ориентации, а некоторые портретные. Макет просмотра изображений в галерее показывает их все в альбомной ориентации, поэтому все портретные изображения выглядят сильно растянутыми!
Поскольку эти изображения являются абстрактными рисунками, я хотел бы повернуть портретные, чтобы они все красиво и равномерно помещались в галерее. Я мог определить их ориентацию, сравнивая их ширину и высоту, а затем вращая портретные, используя Matrix и canvas, но это может быть слишком дорогим и медленным для запуска в getView () BaseAdapter.
Кто-нибудь может придумать менее дорогой способ сделать это?
public View getView(int position, View convertView, ViewGroup parent){
ImageView i = new ImageView(mContext);
Bitmap bm = null;
if (mUrls[position] != null){
bm = BitmapFactory.decodeFile(mUrls[position].toString(),options);
if (bm != null){
//here could use a bitmap rotation code
//....
i.setImageBitmap(bm);
}
}else{
bm = BitmapFactory.decodeResource(getResources(), R.drawable.deleted);
i.setImageBitmap(bm);
}
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setLayoutParams(new Gallery.LayoutParams(200, 130));
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
EDIT
После некоторого тестирования я использую приведенный ниже код, чтобы повернуть изображение, которое не является сверхбыстрым, но в настоящий момент может это сделать.
int w = bm.getWidth();
int h = bm.getHeight();
if (w < h){
Matrix matrix = new Matrix();
matrix.postRotate(-90);
bm = Bitmap.createBitmap(bm, 0, 0, w, h, matrix, false);
}
i.setImageBitmap(bm);