【问题标题】:How do you get an ImageView to fill the entire width of the screen?如何让 ImageView 填满屏幕的整个宽度?
【发布时间】:2012-06-15 22:31:03
【问题描述】:

我正在尝试从网络上获取一张图片并让它填满屏幕的整个宽度。这似乎正在完成我的计算,这些计算总是返回 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();
}

如果由于以下行,此代码将使程序崩溃:

浮动高度 =bitmap.getHeight() * (width/bitmap.getWidth());

由于某种原因,如果位图的宽度大于屏幕宽度,它将始终返回 0,因为浮点数不允许任何小数位。

一个例子是:

屏幕尺寸:800px;图片宽度:500px;图片高度:400px;

然后,新图像的宽度应为 800 像素,高度应为 640 像素。因为浮点数不能正常工作,而不是 400 x 1.6(即 800/500),所以代码会去掉小数点并做 400 x 1。

有什么线索吗?

【问题讨论】:

    标签: java android floating-point imageview


    【解决方案1】:

    将整数除法的结果转换为浮点数:

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

    【讨论】:

    • 它应该是((float)width / bitmap.getWidth()) 否则它将转换为整数除法的浮点结果,在给定的示例中为1。
    • 谢谢 a.ch.它适用于弗拉基米尔的版本。我使用 .net 编码,其中 option strict 处理一切。
    【解决方案2】:

    不要自己缩放位图,让 ImageView 来做。

    ImageView.setScaleType()。根据需要使用 ScaleType.CENTER_CROP 或 CENTER_INSIDE。

    【讨论】:

    • 只是为了添加到您的答案中,您需要将 adjustViewBounds 设置为 true 以防止出现额外的空白。
    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多