【问题标题】:Scaling causes pixelated vector drawables缩放会导致像素化矢量绘图
【发布时间】:2019-09-17 18:44:36
【问题描述】:

我有一个ConstraintLayout,我使用scaleXscaleY 对其进行缩放,这在大多数设备上都能完美运行,但我注意到ConstraintLayout 中的ImageViews 在某些手机上看起来非常像素化(运行 Android 9 的 OnePlus)。

三星 Galaxy S10,Android 9,全高清分辨率:

三星 Galaxy S10,Android 9,WHQL 分辨率:

ImageView 使用矢量可绘制对象,我们设置了以下内容:

  • AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
  • vectorDrawables.useSupportLibrary = true

但图像在某些手机 (OnePlus) 上仍然像素化

有什么想法吗?

编辑

这是可绘制的:

<vector
    android:height="24dp"
    android:viewportHeight="52"
    android:viewportWidth="52"
    android:width="24dp"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#00394D" android:fillType="evenOdd"
        android:pathData="M1.0024,26.342C0.8134,12.559 11.873,1.1907 25.6569,1.0018L26.0037,1C39.5995,1 50.8108,12.0613 50.9971,25.658C51.186,39.441 40.1256,50.8093 26.3417,50.9973L25.994,51C12.399,51 1.1878,39.9387 1.0024,26.342ZM25.7394,7.0155C20.6766,7.0856 15.9386,9.1268 12.3982,12.7657C8.8577,16.4046 6.946,21.1976 7.0152,26.2604C7.1562,36.5854 15.6707,44.9863 25.9957,44.9863L26.2592,44.9845C36.7271,44.8408 45.1271,36.2075 44.9843,25.7396C44.8423,15.4146 36.3279,7.0137 26.0037,7.0137L25.7394,7.0155Z"
        android:strokeColor="#00000000" android:strokeWidth="1"/>
    <path android:fillColor="#009DDB" android:fillType="evenOdd"
        android:pathData="M26.3287,12.2772C24.6911,12.2772 23.3593,13.6099 23.3593,15.2476L23.3593,28.2101C23.3593,28.4019 23.3795,28.5973 23.4171,28.791L23.4706,28.9811L23.5135,29.1222L23.5862,29.3456C23.6213,29.4297 23.6642,29.5086 23.7089,29.5857L23.7737,29.7048L23.8579,29.8564C23.97,30.0238 24.0962,30.1771 24.232,30.3129L29.5645,35.6464C30.1253,36.208 30.871,36.5164 31.6648,36.5164C32.4586,36.5164 33.2043,36.208 33.765,35.6464C34.9225,34.4889 34.9225,32.6042 33.765,31.4467L29.2982,26.9807L29.2982,15.2476C29.2982,13.6099 27.9664,12.2772 26.3287,12.2772"
        android:strokeColor="#00000000" android:strokeWidth="1"/>
</vector>

这是ImageView

<ImageView
    android:id="@+id/clock"
    android:layout_width="24dp"
    android:layout_height="24dp"
    android:layout_marginLeft="10dp"
    android:layout_marginTop="10dp"
    android:scaleType="fitXY"
    app:srcCompat="@drawable/ic_clock"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

【问题讨论】:

  • android:layout_widthandroid:layout_height 尝试将其设为 wrap_content 并让矢量自行调整,并尝试仅更改矢量大小
  • 在drawable-xxxhdpi和drawable-xxhdpi中添加相同的文件
  • 这能回答你的问题吗? Why isn't my vector drawable scaling as expected?

标签: android android-vectordrawable


【解决方案1】:

您可以将android:scaleType="fitXY" 添加到 ImageView

或许能解决你的问题

并确保你的向量不包含像这样的十进制值 .2 或 .4 它应该像 0.2 和 0.4 你可以从代码检查器分析它

您甚至可以在设置 24dp 时更改矢量的宽度和高度,因为默认情况下您可以尝试这样它可能会有所帮助

<vector android:height="80dp" android:width="80dp"

像这样的

【讨论】:

  • 试过了,用drawable和imageview更新了问题。谢谢!
  • 很高兴让我在不同的设备上运行它
  • 我又添加了一个可能有帮助的建议
  • 设置高度和宽度没有区别
  • 我真的很抱歉,也许它只在我的设备中显示完美
猜你喜欢
  • 2020-05-12
  • 2018-06-16
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多