0

我有一个ImageView这样的

 <ImageView
   android:id="@+id/imageFromUrl"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:layout_centerHorizontal="true"
   android:layout_marginTop="50dp"
   android:adjustViewBounds="true"
   android:scaleType="fitCenter" />

我必须显示运行时从网络服务获得的地址中的图像。

请注意,图像的尺寸非常大(249x2902),但文件的大小非常小,约为 32k。

我试过了

 URL url = new URL(urlToImage);
 HttpURLConnection connection = (HttpURLConnection) url.openConnection();
 connection.setDoInput(true);
 connection.connect();
 InputStream input = connection.getInputStream();
 Bitmap myBitmap = BitmapFactory.decodeStream(input);
 imageFromUrl.setImageBitmap(myBitmap);

这似乎并没有渲染图像,它只是白色的。

我也累

imageFromUrl.setImageURI(Uri.parse(urlToImage));

这也不起作用,屏幕是白色的。

但是如果我使用 aWebView并且做

webView.loadUrl(urlToImage);

它加载正常。

是什么赋予了?为什么不ImageView工作?

我正在测试无法正常工作的 Galaxy Tab 2。如果我在模拟器上尝试,一切都很好,ImageView 工作。

4

1 回答 1

1

这里有几件事:

首先,Kbs 的大小并不意味着它不会因为 android 处理图像的方式而导致应用程序崩溃,在堆内部,文件将占用宽度 * 高度 * 4Bytes 的内存,一个 1Kb 大小的大尺寸文件可能很容易变成几 MB,为了下载和处理大尺寸文件,您应该坚持文档中显示的 android 最佳实践,它们提供了一种机制来检查 ImageBounds 而无需加载它,并且一旦计算加载合适的图像大小,适合任何东西你想要的区域。

其次,根据您显示的代码,您似乎正在主 UI 线程中下载图像,考虑到在最新的 android 版本中禁止此操作,在主线程中使用网络调用抛出异常。为了获得更好的响应,请发布 logcat 异常(如果有)...但无论如何,您永远不应该直接加载如此大尺寸的图像,请阅读提供的链接以获取更多信息

希望这可以帮助。

问候

于 2013-10-04T16:12:28.457 回答