我正在开发一个需要更新的现有应用程序,一旦我用矢量drawables替换了一些png图标,就会发生一些非常奇怪的事情:
这些矢量绘图有时变得模糊。我有时说,因为它们并不总是模糊不清。
例如,我有一张带有多张卡片的回收者视图,每张卡片都包含一些图标和其他元素。一切都很好看。但是如果一个insterstitial广告显示,当我关闭它时,这些图标会变得模糊。如果我向下滚动回收器视图,然后再次备份,图标会被清晰地重新绘制,现在它们看起来很好而且很清晰。
另一个例子:我的工具栏右侧有一个图标菜单(经典镜头),左侧有一个后箭头(两个都是矢量绘图)。如果用户点击图标,则工具栏将变为搜索视图,键盘将显示...但后退箭头现在模糊。只要我在搜索视图中对第一个字母进行数字处理,图标就会恢复良好且清晰。
这些只是两个例子,但在应用程序的许多其他部分都会发生。
在gradle中我有
android {
compileSdkVersion 27
defaultConfig {
applicationId '...'
minSdkVersion 21
targetSdkVersion 27
versionCode 12310106
versionName '4.1.1'
renderscriptTargetApi 21
renderscriptSupportModeEnabled true
vectorDrawables.useSupportLibrary = true
我疯了,不知道吗?
更新
事实证明,如果我在Drawables上调用 invalidateSelf(),那么问题就消失了,它们看起来又好看了。 我不想让每个Drawable无效,我不认为这是一个解决方案
答案 0 :(得分:1)
找出原因后,我找到了原因。因为您在多个维度上使用相同的矢量图像。例如,如果您有2张图像,分别为100 dp x 100 dp和50 dp x 50dp,则必须创建2个具有单独名称的矢量图像。即使切换到其他活动,也不能在许多尺寸上使用1个矢量图像。例如,活动A具有50 dp x 50 dp的图像,您使用相同的图像矢量用100dp x100 dp图像打开活动B,然后返回到活动A图像将变形。 原因是Android操作系统针对缓存中存储的映像(特别是弱配置设备)优化了性能。 (总而言之,如果您在多个维度上使用矢量图像,则必须使用不同的名称。)
答案 1 :(得分:0)
当您提供图像视图的修复大小时,可能会发生这种情况。但是当你使用包装内容的宽度和高度时,它可能很小,可能你需要更大的宽度和高度。因此,如果您需要不使用bluring的更大图像,则可以非常轻松地自定义vectorDrawable资源。当您从android studio收集资产时,可以选择覆盖大小。
答案 2 :(得分:0)
这似乎晚了,但是我实际上找到了一个解决此问题的非常简单的方法,只是声明一个常规的Drawable xml,我发现它不会超过4kbs而不是另一个矢量资产,并将您的矢量资产作为一个可绘制项目放在那里并使用作为另一个用于多次绘制同一图像的xml,不模糊,就像这样:-
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/yourvectorxml"
/>
</selector>
如果它在同一活动中为每个平局声明更多这些内容。
对我来说,仅在设备锁定或打开软键盘时才会发生模糊,但使用相同的XML可能会更好。