2017-02-15 21 views
0

Я использую следующую функцию для масштабирования любого изображения на ширину экрана:Android ImageView не масштабируются на экран ширина

DisplayMetrics metrics = new DisplayMetrics(); 
((Activity)context) 
.getWindowManager() 
.getDefaultDisplay() 
.getMetrics(metrics); 

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

// Calculate the ratio between height and width of Original Image 
float ratio = (float) height/(float) width; 

int newWidth = metrics.widthPixels; // This will be equal to screen width 
float newHeight = newWidth * ratio; // This will be according to the ratio calulated 

// calculate the scale 
float scaleWidth = ((float) newWidth)/width; 
float scaleHeight = newHeight/height; 

// create a matrix for the manipulation 
Matrix matrix = new Matrix(); 

// resize the bit map 
matrix.postScale(scaleWidth, scaleHeight); 

// recreate the new Bitmap 
Bitmap resizedBitmap 
    = Bitmap.createBitmap(
       bitmap, 0, 0, 
       width, height, 
       matrix, true 
); 

// make a Drawable from Bitmap to allow to set the BitMap 
// to the ImageView, ImageButton or what ever 
return new BitmapDrawable(resizedBitmap); 

После ввода некоторых проверок, значение, metrics.widthPixels = 540 и ширина новый битмап также равен 540. Это означает, что Bitmap или Imageview должны использовать ширину всего экрана. Вместо этого результирующие изображения не имеют ширины экрана. Я в том числе скриншот:

Screenshot of Screen

Как вы можете видеть на изображении, оставшаяся пустая часть экрана отображается в черном цвете.

Код для создания ImageView является:

ImageView imageBanner = new ImageView(context); 
imageBanner.setLayoutParams(new 
    LinearLayout.LayoutParams(
     Globals.wrapContent, 
     Globals.wrapContent)); 
imageBanner.setBackgroundResource(R.drawable.imv_banner); 
new SyncImage(context, imageBanner, urlImage).execute(); 

Globals.wrapContent являются явные константы, которые содержат одни и те же значения для стандартного макета Params, так что не думаю, что их как разные. SyncImage Класс Async, используемый для загрузки и отображения изображения в ImageView.

Пожалуйста, предоставьте решение для масштабирования изображения до ширины экрана, а изображение должно сохранить исходное соотношение размеров.

спасибо Рама Рама

+0

Посмотрите здесь http://stackoverflow.com/questions/15440647/scaled-bitmap-maintaining-aspect-ratio – raktale

ответ

0

Набор Ширина ImageView к MatchParent вместо WrapContent и рассчитать высоту, чтобы сохранить пропорции изображения. Попробуйте следующий код, чтобы изменить размер изображения:

Display display = getActivity().getWindowManager().getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    int newWidth = size.x; 

    //Get actual width and height of image 
    int width = bitmap.getWidth(); 
    int height = bitmap.getHeight(); 

    // Calculate the ratio between height and width of Original Image 
    float ratio = (float) height/(float) width; 
    float scale = getApplicationContext().getResources().getDisplayMetrics().density; 
    int newHeight = (int) (width * ratio)/scale; 

    return Bitmap.createScaledBitmap(bitmap, newWidth, newHeight, true); 
+0

Тем не менее проблема остается. Я снова применил некоторые проверки, вот что я получу. Мое исходное соотношение изображений: 1: 0,43. В android, если я масштабирую изображение до этого отношения, изображение выглядит как растянутая высота, но если я масштабирую изображение в соответствии с 1: 0.3, то он идеально подходит. Кажется, что в вычислении ширины экрана отсутствует недостающая точка. –

+0

Проверьте обновленный код. Я включил коэффициент масштабирования в вычисление высоты желаемого изображения. Это сработало для меня. – nnn

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

  • Нет связанных вопросов^_^