Как вы получаете ImageView, чтобы заполнить всю ширину экрана? - PullRequest
0 голосов
/ 06 февраля 2012

Я пытаюсь взять изображение из Интернета и заставить его заполнить всю ширину экрана. Это, кажется, работает до выполнения моих расчетов, которые всегда возвращают 0.

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Integer width = metrics.widthPixels;

try {
    ImageView imageView = (ImageView) findViewById(R.id.imageView1);

    Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL("http://www.google.com/intl/en_ALL/images/logos/images_logo_lg.gif").getContent());
    float height =bitmap.getHeight() * (width/bitmap.getWidth());

    bitmap = Bitmap.createScaledBitmap(bitmap, width, (int) height, true);
    imageView.setImageBitmap(bitmap);
} catch (MalformedURLException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

Этот код приведет к сбою программы, если из-за строки:

float height = bitmap.getHeight () * (width / bitmap.getWidth ());

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

Примером может быть:

Размер экрана: 800px; Ширина изображения: 500 пикселей; Высота изображения: 400px;

Новое изображение должно иметь ширину 800 пикселей и высоту 640 пикселей. Поскольку число с плавающей запятой работает неправильно, вместо 400 x 1,6 (т.е. 800/500), код отбрасывает десятичную дробь и делает 400 x 1.

Есть какие-нибудь подсказки?

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

Приведите результат целочисленного деления к числу с плавающей точкой:

float height = bitmap.getHeight() * ((float)width / bitmap.getWidth());
0 голосов
/ 06 февраля 2012

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

См. ImageView.setScaleType () . Используйте ScaleType.CENTER_CROP или CENTER_INSIDE, в зависимости от того, что вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...