我在同一布局中有两个ImageView,一个的width和height设置为56dp,另一个设置为64dp。我已经向项目添加了矢量资产(我从Android Studio中选择了预定义的矢量资产)。在为两个ImageView设置相同的可绘制矢量时,我使用ImageView.setImageResource(int resId)
。
由于某种原因,这导致最小的ImageView具有锯齿状边缘。我将Drawables设置为ImageViews的顺序都没有关系。哪个ImageView最小或具有什么大小都没有关系。只要一个比另一个小,最小的总是会有锯齿状的边缘。
compileSdkVersion 28
minSdkVersion 28
答案 0 :(得分:0)
之所以会发生这种情况,是因为从同一资源加载的Drawable
个实例共享一个ConstantState
实例。我不确定ConstantState
的哪个部分对此负责,但是从功能上来说,您正在获得两个不同的64x64可绘制对象,其中一个(严重)缩小了。
您可以通过使用Drawable.mutate()
方法来解决此问题,以确保您的两个ImageView获取具有不同ConstantState的Drawable。您只需要mutate()
两个可绘制对象之一,而选择哪个无关紧要。
当然,这意味着您将必须获取实际的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());