在 ANDROID NOUGAT 上显示模糊图像的矢量绘图

Posted

技术标签:

【中文标题】在 ANDROID NOUGAT 上显示模糊图像的矢量绘图【英文标题】:Vector Drawables showing Blurr image on ANDROID NOUGAT 【发布时间】:2017-11-23 22:00:51 【问题描述】:

我是安卓新手。我正在尝试在我的应用程序中使用矢量可绘制对象。以下代码在 Marshmallow 版本之前工作正常。在较低版本上也可以正常工作。但是一旦我在 Nougat 上运行它,图像就会变得模糊。

我的 build.gradle(项目)版本是 2.0+,并在我的 build.gradle(应用程序)中添加了以下代码

android 
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig 
        minSdkVersion 15
        targetSdkVersion 25
        vectorDrawables.useSupportLibrary = true
    

支持的版本是:

compile 'com.android.support:appcompat-v7:25.3.1'

我还在 onCreate 方法中添加了以下代码

 protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

在我的 XML 中:

<ImageView
    android:layout_
    android:layout_
    app:srcCompat = "@drawable/ic_camera_black_24dp"/>

【问题讨论】:

您是否尝试将android:scaleType="fitXY" 添加到您的 ImageView XML 中? @MatPag 感谢您的快速回复。我也尝试过,但都是徒劳的。图像仍然模糊。 你能组装一个小示例项目并提供github链接吗?我对此感到好奇,因为矢量绘图过去有很多问题,应该用最新的支持库来解决 @MatPag 我已将其上传到 GitHub。链接是:github.com/ChoudharyAnjali/Vector-drawable 我回家看看这个 【参考方案1】:

我对您的代码进行了一些尝试,发现问题似乎是由于使用了同一图标的不同尺寸造成的。在您的特定情况下,您使用setCompoundDrawablesRelativeWithIntrinsicBounds 方法将ImageView 的矢量图标设置为200x200dp,并将相同的图标附加到TextView,该方法使用定义的矢量widthheight 来确定其大小。 (在您的情况下为 24dp)

此行为背后的主要原因是该 Google 工程师的回复,您可以找到 here。

所以,如果您不希望以后出现问题,您不应该使用大小为 200x200dp 和 24x24dp 的相同矢量图标,因为系统会创建一些缓存的位图(以优化性能)您需要的大小,这可能会导致某些设备上的图像模糊。

如果您需要大小完全不同的相同图标,请使用多个 Vector drawable。

PS:关于您关于如何将 JPEG 或 PNG 转换为矢量可绘制对象的评论问题,我可以说矢量不应该由照片构建(即使可能非常困难和昂贵),矢量只有在以下情况下才方便您使用小路径,这就是它们仅用于图标或徽标的原因

【讨论】:

你的意思是写“多个PNG”吗?我会说多个 VectorDrawables 作为您链接到建议的答案。 是的对不起,我的意思是多个矢量资源,我会尽快纠正它 @MatPag 非常感谢。我真的很困惑为什么图像模糊。这真是一个很好的解释。 :) 。还有关于转换问题 如果我有 PNG 格式的小图标,我想将这些小图标转换为矢量绘图。如何实现? 如果您有简单的 PNG 图标,您可以使用在线工具并尝试结果,例如 vectorizer.io(在 google 上搜索更多选项)。最好的方法应该是使用像 Adob​​e Illustrator 这样的程序,并使用 PNG 作为背景,在矢量中重新创建路径(但您需要知道如何使用这些程序)。顺便说一句,如果它对您有所帮助,请接受答案(箭头下的检查)。祝你好运:)

以上是关于在 ANDROID NOUGAT 上显示模糊图像的矢量绘图的主要内容,如果未能解决你的问题,请参考以下文章

Android Nougat 设备在 Eclipse 中显示未知目标

Videoview 不在 nougat 24 中显示,但在 android Q 29 中显示和工作

Android Studios:Android 设备管理器在文件资源管理器中未显示 Nougat 7.0 的文件

通过 webview 显示的 Android 本地图像模糊

Android Camera 2 API 在 Nougat 7.1 上的 flash 问题

Nougat多窗口支持