java - 如何使用java以编程方式更改 vector 绘图的大小

标签 java android drawable

我想更改回收站 View 中显示的图标的大小。我的回收商 View 基本上显示了费用类别。我已经使用 android studio 创建的 XML 布局中的图标对一些类别进行了硬编码,但用户也可以定义自己的类别并可以为此选择一个图标,我正在使用 https://github.com/maltaisn/icondialoglib/wiki 对话框允许用户在定义新类别时选择自己选择的图标。我将对话框中可绘制图标的 ID 保存到数据库中,并在适配器类的 onBindViewHolder 方法中检索 ID,并使用该 ID 获取图标。如果我显示在 XML 中定义的 vector 可绘制对象,则图标的大小(48x48)显示完美,但从对话框中选择的图标的大小较小(下面共享图像)。我尝试将其更改为 48x48,但不起作用。

<ImageView
        android:id="@+id/single_column_item_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        ></ImageView>

在 XML 中定义的 vector 可绘制对象。

    <vector android:autoMirrored="true" android:height="48dp"
    android:viewportHeight="32" android:viewportWidth="32"
    android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#333332" android:pathData="M24.832,11.445C24.646,11.167 24.334,11 24,11h-1c-0.553,0 -1,0.447 -1,1v6c0,0.553 0.447,1 1,1h4c0.553,0 1,-0.447 1,-1v-1.5c0,-0.197 -0.059,-0.391 -0.168,-0.555L24.832,11.445zM27,18h-4v-6h1l3,4.5V18z"/>
    <path android:fillColor="#333332" android:pathData="M31.496,15.336l-4,-6C26.938,8.499 26.004,8 25,8h-4V6c0,-1.654 -1.346,-3 -3,-3H3C1.346,3 0,4.346 0,6v11c0,1.654 1.346,3 3,3h0v3c0,1.654 1.346,3 3,3h1.142c0.447,1.721 2,3 3.859,3c1.857,0 3.41,-1.279 3.857,-3h5.282c0.447,1.721 2,3 3.859,3c1.857,0 3.41,-1.279 3.857,-3H29c1.654,0 3,-1.346 3,-3v-6C32,16.406 31.826,15.83 31.496,15.336zM3,18c-0.552,0 -1,-0.447 -1,-1V6c0,-0.553 0.448,-1 1,-1h15c0.553,0 1,0.447 1,1v2v2v7c0,0.553 -0.447,1 -1,1H3zM11.001,27c-1.105,0 -2,-0.896 -2,-2s0.895,-2 2,-2c1.104,0 2,0.896 2,2S12.104,27 11.001,27zM24,27c-1.105,0 -2,-0.896 -2,-2s0.895,-2 2,-2c1.104,0 2,0.896 2,2S25.104,27 24,27zM30,23c0,0.553 -0.447,1 -1,1h-1.143c-0.447,-1.721 -2,-3 -3.857,-3c-1.859,0 -3.412,1.279 -3.859,3h-5.282c-0.447,-1.721 -2,-3 -3.857,-3c-1.859,0 -3.412,1.279 -3.859,3H6c-0.552,0 -1,-0.447 -1,-1v-3h13c1.654,0 3,-1.346 3,-3v-7h4c0.334,0 0.646,0.167 0.832,0.445l4,6C29.941,16.609 30,16.803 30,17V23z"/>
</vector>

Java代码

@Override
public void onBindViewHolder(@NonNull CategoryViewHolder holder, int position) {

String categoryName=addCategoriesList.get(position).getColumn_value();
holder.textView.setText(categoryName);
if(categoryName.equals("Transport")){
    holder.imageView.setImageResource(R.drawable.ic_transport);
}else{
    if(IconHelper.getInstance(holder.imageView.getContext()).getIcon(addCategoriesList.get(position).getIconID())!=null){
        Drawable drawable=IconHelper.getInstance(holder.imageView.getContext()).getIcon(addCategoriesList.get(position).getIconID()).getDrawable(holder.imageView.getContext());
        drawable.setBounds(0,0,100,100);

    holder.imageView.setImageDrawable(drawable);
}}
}

enter image description here

最佳答案

这行看起来可能是罪魁祸首:

drawable.setBounds(0,0,100,100);

这些是像素值,因此它们会导致图标以不同的物理尺寸显示,具体取决于您用于测试的设备的像素密度。如果你的设备是xxxhdpi,100px会比48dp小很多。

您可以将 px 转换为 dp 以获得此处使用的正确值,但我认为您可以更简单。一旦您知道您正在使用用户选择的图像,您实际上不必构建 Drawable 对象。相反,您可以直接使用资源值:

int iconId = addCategoriesList.get(position).getIconID();
holder.imageView.setImageResource(iconId);

关于java - 如何使用java以编程方式更改 vector 绘图的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58683085/

相关文章:

Java - 使用自定义 OutputStream 的 PrintStream 上的奇怪行为

Android 在来自应用程序的先前命令的上下文中执行 shell

java - map View 未显示

android - 可以在 XML 中创建固定宽度的可绘制对象吗?

java - 将 Java 应用程序部署到 Tomcat 的问题

java - 在Java中引用dll

java - 为什么我们不能在静态方法中使用 'this' 关键字

android - 收到短信后在 Android 中刷新 ListView 不起作用

android三角形drawablw xml

java - Android 模拟器 Nexus 5x 加载错误的可绘制大小?