【问题标题】:Why image changes when imported to eclipse?为什么导入eclipse时图像会发生变化?
【发布时间】:2014-04-17 00:25:59
【问题描述】:

首先我应该说我对android完全陌生,所以也许我的问题对你来说很普通。

问题:我在Photoshop中设计了以下图片(透明背景的png-24)

并将其添加到我的项目中的res/drawable 中,以将其用作ImageButton 的来源,但它看起来像这样:

如您所见,圆形已经完全改变并且灰色背景被添加到图像中。 告诉我如何解决这个问题?是我使用这张图片的方式不对还是图片格式不对?

编辑:我刚刚在添加到我的帖子时调整了图像的大小(简单的png),突然出现了图像的一个角落,是不是因为大小或类似的原因?

这是包含活动的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageButton
        android:id="@+id/showHistBtn"
        android:src="@drawable/showhistory" />

    <ImageButton
        android:id="@+id/findWordBtn"
        android:src="@drawable/find_aword" />

    <ImageButton
        android:id="@+id/insertNewWordBtn"
        android:layout_width="315dp"
        android:layout_height="200dp"
        android:src="@drawable/insertnewword" />

</LinearLayout>

【问题讨论】:

  • png-24 with transparent background 在自然界中并不存在。如果您有透明度,那么它是 32 位 PNG(每个 Alpha 通道 8 位,每个 R 通道 8 个,每个 G 通道 8 个,每个 B 通道 8 个)。所以,问题就在这里。
  • 你的意思是如果我将输出保存为 png-8 或 jpg 它会得到修复?
  • JPG 不支持任何透明度。 png-32(每通道 8 位)可以解决问题。
  • @Vyger:谢谢,我现在就试试。
  • 好的,我的建议:平滑角落(使用抗锯齿)。更高的分辨率也可能有所帮助(72 dpi 真的很差)。考虑到 Android 中分辨率最低的设备有 120 dpi...而正常是 160 dpi...

标签: java android eclipse image png


【解决方案1】:

您可以简单地使用Photoshop 绘制阴影来绘制9-patch 图像并将其放入drawable 文件夹并在您的ImageButton in xml 中进行设置:

android:background="@drawable/your_9patch_image"

我总是用 Photoshop 来做,它超级简单。更多详情请看:Draw 9-patch

【讨论】:

  • 你的意思是简单的 png 图像在 android 中不能很好地显示?
  • 使用 png 图像,您必须使用占用大量内存的大尺寸来绘制它,而不是使用 9-patch 您可以绘制非常小的图像占用几千字节。我总是使用 9-patch ;D
  • 谢谢,它真的很有用,但我没有意识到这是由于 png 格式的问题(外观)?
  • PNG 图像是具有良好质量和透明度的最佳折衷方案,但它们的可压缩性并不高。 9补丁允许通过拉伸一些定义的区域来节省一些浪费的像素区域。
【解决方案2】:

经过我们在 cmets 中的长时间讨论,看看 9 补丁可以做什么(只是为了让您了解仅使用 1 个图像可以真正实现什么):

通过使用此图片 (/res/drawable/my_btn.9.png):

我得到了这个结果

您会注意到文本没有很好地居中:这是因为我很着急,并且没有使它完美(在为 9 补丁调整大小和黑边时)。
并且起始图像质量不高。

我使用了 16sp 的字体,你可能会使用 32sp 甚至更大的字体。

注意:注意扩展名:.9.png

【讨论】:

  • 哦,我发现了一些很奇怪的东西。我刚刚在添加到我的帖子时调整了图像的大小(简单的 png),突然出现了图像的一个角落,请你再看一遍帖子,看看是不是因为大小或类似的原因?
  • 当我添加:android:scaleX="0.5" 时,我什至完全出现(但压缩了)。现在我认为这都是关于宽度和高度的。
  • 通常,您会使用layout_width="wrap_content"(以及layout_height)。有时您更喜欢“match_parent”。很少,您更喜欢 dp 中的固定大小。还要注意srcbackground 之间的区别:src 不会拉伸您的图像,而 background 会。
【解决方案3】:

我刚刚将这些添加到活动布局 xml 文件中的 ImageButton 标记中,它已修复:)

android:scaleType="fitXY"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="0dp"

我完全凭直觉找到了答案,但经过反复试验发现,以上陈述都不应该被省略(对于未来的观众)。

【讨论】:

  • 当您使用 src 而不是背景时,这是正确的。您可能还会发现 scaleType 的其他值在不同场合很有用。
  • 现在我看到了您的界面,我可以说,是的,在这种情况下,它是您的完美解决方案,+1。但仍然请考虑使用 9 个补丁,以进行整体优化。
  • @Vyger:感谢您的建议,是的,我当然应该使用它们。
猜你喜欢
  • 1970-01-01
  • 2013-07-30
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
  • 2013-02-23
  • 2013-01-29
  • 1970-01-01
相关资源
最近更新 更多