2012-02-06 81 views
0

我试图从网上拍摄图像,并填充整个屏幕宽度。这似乎是工作到做我的计算,其总是返回0。如何获得ImageView以填充整个屏幕宽度?

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()*(宽/bitmap.getWidth());

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

一个例子是:

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

新图像的宽度应为800px,高度为640px。因为浮球不能正常工作,而不是400 x 1.6(即800/500),代码是下降小数,并做400 x 1.

任何线索?

回答

1

演员整数等分的结果飘起:

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

它应该是'((float)width/bitmap.getWidth())'否则它会抛出整数除法的结果,在给出的例子中为1. – Vladimir 2012-02-06 08:22:10

+0

对不起:),我编辑了答案 – 2012-02-06 08:25:31

+0

谢谢a.ch.它适用于弗拉基米尔的版本。我使用.net编码哪里选项严格处理一切。 – 2012-02-06 08:31:47

0

自己不要放大位图,让ImageView的做到这一点。

请参阅ImageView.setScaleType()。根据您的需要使用ScaleType.CENTER_CROP或CENTER_INSIDE。

+0

只需添加到您的答案,您需要将adjustViewBounds设置为true以防止出现额外的空白区域。 – 2012-02-06 23:03:32

相关问题