2014-10-15 7 views
0

Предположим, что размер изображения этого прекрасного гриба, который я взял на днях, неизвестен. Это может быть 350x500 пикселей или 1080x1920 или 1920x1080 или 1x1. Любое изображение должно быть в состоянии использовать здесь.Как растянуть изображение в правильном направлении?

То, что я пытаюсь выполнить это: Мне нужно растянуть изображение на всем пути в направлениях, где она отвечала бы край родительского вида рано, но не занимать какой-либо области, в двух других направлениях ,

Итак, вот пример: у меня есть вертикальное изображение, и мне нужно отобразить его на планшете. В этом случае он должен быть растянут (а также поддерживать соотношение сторон) вверх и вниз, но не влево и вправо. Важно, чтобы черная область слева и справа была незанятой. Он должен выглядеть следующим образом: enter image description here

То же изображение нужно будет растягиваться влево и вправо, но не вверх и вниз, если она шире, чем родительское представление:

enter image description here

Вот что я пробовал:

  1. Настройка XML layout_width и layout_height атрибуты для различных комбинаций match_parent и wrap_content. Это не сработало, потому что мы не можем быть уверены, как растянуть изображение во время компиляции, потому что у нас нет размеров изображения или размеров контейнера.

  2. Пробовал программно растягивать растровое изображение как this, но это только растягивает ширину и немного неэффективно.

Было бы хорошо, если бы был способ сделать это путем регулировки LayoutParams из ImageView программно, основываясь на том, как отношение изображения можно сравнить с отношением родительского контейнера. Кто-нибудь знает, как это сделать?

+0

Пробовали ли вы масштаб типа CENTER_INSIDE? См. Http://developer.android.com/reference/android/widget/ImageView.ScaleType.html – Henry

+0

Итак, вы говорите, что 'imageView.setScaleType (ScaleType.CENTER_INSIDE)' или 'ScaleType.CROP' для представления не будет достаточно, потому что вы пытаетесь сделать несколько сложных решений в этом процессе? –

+0

@Henry 'center_inside' не растягивает изображение вообще, если изображение слишком мало. Если я использую 'wrap_content', он сохранит исходный размер изображения. Если я использую 'match_parent', он все равно сохранит исходный размер изображения, даже если вид занимает весь родитель. – Oleksiy

ответ

0

Я думаю, что нет в наличии ScaleType механизм для этого. Вам необходимо будет определить ваш и использовать класс Matrix для его масштабирования.

Это код, который я использовал, чтобы получить обложку прикрепленного изображения, чтобы показать с моим обычаем ScaleType

int boundBoxSize = getResources().getDimensionPixelSize(R.dimen.user_profile_avatar_size); 
int border = getResources().getDimensionPixelSize(R.dimen.user_profile_avatar_border); 

Drawable drawing = imageView.getDrawable(); 
Bitmap bitmap = ((BitmapDrawable)drawing).getBitmap(); 

int width = bitmap.getWidth(); 
int height = bitmap.getHeight(); 

float xScale = ((float) boundBoxSize)/width; 
float yScale = ((float) boundBoxSize)/height; 
float scale = (xScale <= yScale) ? xScale : yScale; 

Matrix matrix = new Matrix(); 
matrix.postScale(scale, scale); 

Bitmap scaledBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); 
width = scaledBitmap.getWidth(); 
height = scaledBitmap.getHeight(); 
imageView.setImageBitmap(scaledBitmap); 

LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) imageView.getLayoutParams(); 
layoutParams.width = width + (2*border); 
layoutParams.height = height + (2*border); 

imageView.setLayoutParams(layoutParams); 
imageView.setBackgroundColor(getResources().getColor(R.color.image_border)); 
imageView.setPadding(border, border, border, border); 

enter image description here

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