避免 ImageView 中的图像缩放
Posted
技术标签:
【中文标题】避免 ImageView 中的图像缩放【英文标题】:Avoid image scaling in ImageView 【发布时间】:2012-03-20 13:25:20 【问题描述】:我正在使用带有这些 XML 属性的图像视图
<ImageView
android:id="@+id/widget_list_bitmap"
android:layout_
android:layout_
android:background="#00000000"
android:scaleType="center"
android:src="@drawable/place_holder" >
</ImageView>
在运行时,我创建了一个 400x400 位图,将其保存到文件并使用文件 URI 设置 ImageView src
remoteViews.setUri(R.id.widget_list_bitmap, "setImageURI", myFileUri);
(这是为了避免大型位图的 RemoteViews 问题)。
除了显示的图像按比例缩小并且小于 400x400,更像是 250 x 250(可能 400/密度,密度 = 1.5)之外,一切正常。
有没有办法强制 ImageView 真的不缩放它从 URI 获取的图像?
【问题讨论】:
【参考方案1】:您可以手动下载它,并在加载时使用 BitmapFactory
将 inScaled
设置为 false。然后你会使用setImageViewBitmap
而不是setUri
或setImageViewUri
。
更新:
不幸的是,我并没有真正看到使用setUri
的方法。使用setUri
绕过1MB 限制的另一种方法是使用setImageViewBitmap
,但将位图切片并显示在多个视图上,可能是2x2 或3x3 的ImageViews 网格或类似的东西。您必须使用partiallyUpdateAppWidget
将其拆分为多个更新,但我认为它应该可以工作。问题是这需要 API 11。
【讨论】:
RemoteViews 存在大位图问题。这就是我选择 URI 路线的原因。你可以在这里找到更多信息groups.google.com/forum/#!topic/android-developers/KKEyW6XdDvg/… 更新了另一种解决 1MB 限制的可能解决方案。 不是对我的问题的直接回答,而是解决了我的潜在问题,因此将其标记为解决方案(我应该编辑标题吗?)。切片似乎有效(在垂直 LinearLayout 中使用 3 个 ImageView)。目前我正在做三个定期更新。不知道partialUpdateAppWidget,看看试试看。谢谢。 更新:partialUpdateAppWidget 仅可从 API 11 获得(我使用的是 8)。使用 updateAppWidget() 的切片确实有效,但是大约 20 次更新中我仍然会遇到绑定错误。尝试在更新每个图像切片后发出 System.gc() ,这会使事情变得更好,但仍然不是 100% 可靠。仍在寻找如何避免使用 setUri 缩放 ImageView 的解决方案。 也找到了这个讨论,以防有人感兴趣。 groups.google.com/forum/#!topic/android-developers/KKEyW6XdDvg/…以上是关于避免 ImageView 中的图像缩放的主要内容,如果未能解决你的问题,请参考以下文章
centerInside 不能将 Drawable 缩放到 ImageView
如何缩放 + 裁剪图像并在 imageview 上显示裁剪的图像