gpt4 book ai didi

java - vector 绘图的奇怪问题。 ImageView 中的锯齿状边缘

转载 作者:行者123 更新时间:2023-11-29 23:09:53 30 4
gpt4 key购买 nike

我在同一布局中有两个 ImageView,一个的宽度和高度设置为 56dp,另一个设置为 64dp。我在项目中添加了一个 vector Assets (我从 Android Studio 选择了一个预定义的 vector Assets )。在为两个 ImageView 设置相同的可绘制 vector 时,我使用 ImageView.setImageResource(int resId)

出于某种原因,这会导致最小的 ImageView 具有锯齿状边缘。我将 Drawables 设置为 ImageViews 的顺序并不重要。哪个 ImageView 是最小的或者它们有多大并不重要。只要一个比另一个小,最小的总是有锯齿状的边缘。

compileSdkVersion 28
minSdkVersion 28

Screenshot

最佳答案

发生这种情况是因为从同一资源加载的 Drawable 实例共享 ConstantState 实例。我不确定 ConstantState 的哪一部分对此负责,但您在功能上得到了两个不同的 64x64 可绘制对象,其中一个(严重)缩小了。

您可以通过使用 Drawable.mutate() 方法来解决这个问题,以确保您的两个 ImageView 正在获取具有不同 ConstantState 的 Drawable。您只需 mutate() 两个 drawable 之一,您选择哪个并不重要。

当然,这意味着您将必须获得一个实际的 Drawable 实例,而不是使用 setImageResource()

ImageView large = findViewById(R.id.large);
large.setImageResource(R.drawable.ic_arrow_drop_down_circle_black_24dp);

ImageView small = findViewById(R.id.small);
small.setImageDrawable(AppCompatResources.getDrawable(this, R.drawable.ic_arrow_drop_down_circle_black_24dp).mutate());

关于java - vector 绘图的奇怪问题。 ImageView 中的锯齿状边缘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56152243/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com