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

Jon*_*han 4 xml android drawable imageview

问题

我在我的XML中有一个ImageView:

                <ImageView
                android:layout_width="100dp"
                android:layout_height="100dp"
                android:src="@drawable/ic_person_add"
                android:alpha="0.87" />
Run Code Online (Sandbox Code Playgroud)

ic_person_add是正常的材料设计Vectoricon.

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

Nexus 5

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

笔记2

如何在每台设备上获得ImageView(Vector为src)?优选仅使用xml溶液.

我已经发现:

  • 添加android:adjustViewBounds="true"- >什么也没做
  • ImageView图像似乎像素化和低质量 - >不适用于矢量
  • 设置BitmapFactory.inscaled=false- >不仅适用于xml,我不知道将它放在自定义ImageView类中的哪个位置.

Jon*_*han 7

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

链接Melllvar发布状态:

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

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

您可以通过更改,更改VectorXML中转换的PNG的大小

android:height android:width
Run Code Online (Sandbox Code Playgroud)

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

<vector android:height="100dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="100dp">
Run Code Online (Sandbox Code Playgroud)