避免 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】:

您可以手动下载它,并在加载时使用 BitmapFactoryinScaled 设置为 false。然后你会使用setImageViewBitmap 而不是setUrisetImageViewUri

更新:

不幸的是,我并没有真正看到使用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 中的图像缩放的主要内容,如果未能解决你的问题,请参考以下文章

缩放图像以填充 ImageView 宽度并保持纵横比

centerInside 不能将 Drawable 缩放到 ImageView

如何缩放 + 裁剪图像并在 imageview 上显示裁剪的图像

在 ImageView 中缩放图像(缩放 x,y) - IOS

图像缩放、滚动视图、裁剪

水平图像的 ImageView 缩放问题