Android如何以编程方式调整(缩放)XML矢量图标

10

这真是让我疯狂。我想要能够通过编程方式调整XML向量图标的大小,以便在ImageView中使用。

到目前为止,我所做的还没有起作用:

Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.ic_marker,null);
drawable.setBounds(0,0,512,512);
imageVenue.setImageDrawable(drawable);

矢量图标ic_marker没有被重新调整大小。每次它都保持着硬编码的宽度和高度数值。

有什么想法吗?

2个回答

3

您可以通过编程方式更改图像视图的宽度和高度。由于矢量可绘制对象将保留图像的原始质量,因此这将实现所需的输出结果。

ImageView iv = (ImageView) findViewById(R.id.imgview);
int width = 60;
int height = 60;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width,height);
iv.setLayoutParams(params);

4
谢谢。虽然这个解决方案很好,但我希望有一种替代方案,可以直接缩放我的可绘制对象,并将其放置在ImageView中,而不会影响ImageView本身的参数设置。我会研究一下这个问题,如果按照我想要的方式无法实现,我会接受你的答案。 - ThanosFisherman
我建议使用不同的PNG文件作为典型的可绘制对象,为不同的设备使用不同的尺寸。加油 :) - Farhad
6
是的,我知道,但我的整个观点在于使用矢量可绘制图形,这样我就不需要具有不同尺寸的PNG文件。 - ThanosFisherman
如果可绘制对象是作为TextView的一部分使用app:drawableEndCompat,那么这种方法就不起作用。 - undefined

0

我目前也遇到了同样的问题。

我正在尝试像这样的解决方法,因为ViewParent实际上已经设置了高度,所以我使用match_parent并设置边距。但是它并不总是有效,因为我仅仅在RecyclerView的viewholder中使用此视图...另外,我注意到有时我可以看到带有伪影的缩放版本,有时是全尺寸,有时出现边距和更大的边距...但是如果您将其用于更简单的场景,则仍然可能适用于您。

mImageViewFront.setImageDrawable(vectorDrawable);
final int paddingLR = mImageViewFront.getWidth() / 4;
final int paddingTB = mImageViewFront.getHeight() / 4;
LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
params.setMargins(paddingLR, paddingTB, paddingLR, paddingTB);
mImageViewFront.setLayoutParams(params);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接