我的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)上,图标很漂亮,非常清晰:
在Note 2(Android 4.4)上,图标变得非常像素化和丑陋:
如何在每台设备上使用ImageView(带有Vector作为src)?优选仅使用xml溶液。
android:adjustViewBounds="true"
- &gt;没有做任何事BitmapFactory.inscaled=false
- &gt;不仅仅使用xml,我也不知道将它放在自定义ImageView类中的哪个位置。答案 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,您可能需要尝试手动栅格化矢量图像以查看是否可以解决问题。
如果您正在使用光栅图形,您可能需要为每个密度变量添加一些视觉元素,以便了解实际使用的是哪一个。