ImageView在较旧的Android设备上按像素化

时间:2016-01-11 23:06:51

标签: android xml imageview drawable

问题

我的XML中有一个ImageView:

                <ImageView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:src="@drawable/ic_person_add"
                android:alpha="0.87" />

ic_person_add是正常的材料设计Vectoricon

在我的Nexus 5(Android 6)上,图标很漂亮,非常清晰:

Nexus 5

在Note 2(Android 4.4)上,图标变得非常像素化和丑陋:

Note 2

如何在每台设备上使用ImageView(带有Vector作为src)?优选仅使用xml溶液。

我已经找到了:

  • 添加android:adjustViewBounds="true" - &gt;没有做任何事
  • ImageView images seem pixelated and low quality - &gt;不适用于vector
  • 设置BitmapFactory.inscaled=false - &gt;不仅仅使用xml,我也不知道将它放在自定义ImageView类中的哪个位置。

2 个答案:

答案 0 :(得分:7)

真正的问题不是Note 2的DPI,它是Android版本。

Link Melllvar发布声明:

  

在res / drawable中有一个vectorDrawable图像后,Gradle插件会在构建时间内自动生成API级别20及以下的光栅PNG图像

所以我的Android 6设备真的有一个Vectorgraphic作为ImageView的源,所以它设法完美地扩展它。 对于Note 2(在比Android 5 OS更早的版本上运行),Android Studio会自动将Drawables文件夹中的Vectorgraphic转换为PNG。

您可以通过更改

来更改VectorXML中转换的PNG的大小
android:height android:width

到dp的大小你的vectorgraphic需要在API 20之前的设备上显示。所以在我的案例中(最多100dp)我不得不将值更改为:

<vector android:height="100dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="100dp">

答案 1 :(得分:1)

Nexus 5密度存储区为xxhdpi,而注释2(基于this)为xhdpi。这表明您的xxhdpi位图的大小正确(或至少等于或高于所需大小),而xhdpi不是。

如果您使用的是Android Studio最新版本提供的automatic conversion,您可能需要尝试手动栅格化矢量图像以查看是否可以解决问题。

如果您正在使用光栅图形,您可能需要为每个密度变量添加一些视觉元素,以便了解实际使用的是哪一个。