标签: android-vectordrawable

Android Studio 4.1:矢量可绘制对象中的主题属性导致 java.lang.IllegalArgumentException

我刚刚转移到 Android Studio 4.1,现在在制作我的项目时,它在我的矢量绘图中产生了新的崩溃。

我在我的向量中使用主题属性,但这些属性似乎不再受支持:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
  <path
      android:pathData="..."
      android:fillColor="?attr/colorPrimary"
      android:fillType="nonZero"/>
  <path
      android:pathData="..."
      android:fillColor="?attr/colorOnPrimary"
      android:fillType="nonZero"/>
</vector>
Run Code Online (Sandbox Code Playgroud)
Cause 1: org.gradle.workers.internal.DefaultWorkerExecutor$WorkExecutionException: A failure occurred while executing com.android.build.gradle.internal.tasks.Workers$ActionFacade
    at org.gradle.workers.internal.DefaultWorkerExecutor$WorkItemExecution.waitForCompletion(DefaultWorkerExecutor.java:336)
    at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:142)
    at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForItemsAndGatherFailures(DefaultAsyncWorkTracker.java:90)
    at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForAll(DefaultAsyncWorkTracker.java:80)
    at org.gradle.internal.work.DefaultAsyncWorkTracker.waitForCompletion(DefaultAsyncWorkTracker.java:68)
    at org.gradle.workers.internal.DefaultWorkerExecutor.await(DefaultWorkerExecutor.java:244)
    at com.android.build.gradle.internal.tasks.Workers$WorkerExecutorAdapter.await(Workers.kt:188)
    at com.android.ide.common.resources.MergeWriter.end(MergeWriter.java:48)
    at com.android.ide.common.resources.MergedResourceWriter.end(MergedResourceWriter.java:241)
    at com.android.ide.common.resources.DataMerger.mergeData(DataMerger.java:292)
    at com.android.ide.common.resources.ResourceMerger.mergeData(ResourceMerger.java:385)
    at com.android.build.gradle.tasks.MergeResources.lambda$doFullTaskAction$1(MergeResources.java:319)
    at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:58)
    at com.android.build.gradle.tasks.MergeResources.doFullTaskAction(MergeResources.java:315)
    at com.android.build.gradle.internal.tasks.IncrementalTask.handleIncrementalInputs(IncrementalTask.kt:110)
    at com.android.build.gradle.internal.tasks.IncrementalTask.access$handleIncrementalInputs(IncrementalTask.kt:65)
    at com.android.build.gradle.internal.tasks.IncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:73)
    at com.android.build.gradle.internal.tasks.IncrementalTask$taskAction$$inlined$recordTaskAction$1.invoke(AndroidVariantTask.kt:34)
    at com.android.build.gradle.internal.tasks.Blocks.recordSpan(Blocks.java:91)
    at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction$gradle(IncrementalTask.kt:137)
    at sun.reflect.GeneratedMethodAccessor591.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
    at org.gradle.api.internal.project.taskfactory.IncrementalTaskInputsTaskAction.doExecute(IncrementalTaskInputsTaskAction.java:47) …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-vectordrawable

11
推荐指数
1
解决办法
1192
查看次数

Android Layer-List VectorDrawable大小

我的问题与这个问题有关:链接.我最近将用于Android的大部分资源从用于不同分辨率的不同png文件更改为矢量绘图.我正在使用"滑动到删除"库,可以在滑动过程中更改其视图的背景,以显示带有垃圾桶图标的Gmail风格红色背景,类似于此(具有绿色背景和支票)图标):

在此输入图像描述

我曾经使用以下代码执行此操作,而我仍然使用<API 21

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="@color/accent"/>
    </item>
    <item android:right="@dimen/activity_horizontal_margin">
        <bitmap
            android:gravity="right|center_vertical"
            android:src="@drawable/ic_delete_24dp"/>
    </item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

但是,API 21+需要不同的语法

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="@color/accent" />
    </item>
    <item android:right="@dimen/activity_horizontal_margin"
          android:drawable="@drawable/ic_delete_24dp"
          android:gravity="right|center_vertical"/>
</layer-list>
Run Code Online (Sandbox Code Playgroud)

现在,API 21和API 22(Lollipop)上的图标将被拉伸以填充屏幕,而不是左/右侧的图标.有没有办法指定图标的宽度?

android background layer-list android-vectordrawable

10
推荐指数
1
解决办法
4469
查看次数

tileMode重复与矢量drawable

我们可以通过使用重复绘制 tileMode="repeat"

<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/some_png"
    android:tileMode="repeat"
    android:dither="true" />
Run Code Online (Sandbox Code Playgroud)

它只适用于drawable是位图的情况.

有没有类似的方法重复矢量drawable?

android android-vectordrawable

10
推荐指数
0
解决办法
1834
查看次数

VectorDrawable:如何在画布上定位?

您好我的自定义视图:

MyCustomView extends View 
Run Code Online (Sandbox Code Playgroud)

我做了一个VectorDrawable

mMyVectorDrawable = VectorDrawableCompat.create(getContext().getResources(), R.drawable.ic_some_image, null);
Run Code Online (Sandbox Code Playgroud)

我已经设定了界限

mMyVectorDrawable.setBounds(0, 0, mMyVectorDrawable.getIntrinsicWidth(), mMyVectorDrawable.getIntrinsicHeight());
Run Code Online (Sandbox Code Playgroud)

我在画布上绘制它

mMyVectorDrawable.draw(canvas);
Run Code Online (Sandbox Code Playgroud)

我在0,0位置看到了图像

但我该如何定位呢?如何定位Rect,我认为前两个参数setBounds将是X和Y坐标的开始绘图,但这只会影响尺寸.

如何将矢量绘图放在画布上?

谢谢阅读

android android-canvas android-vectordrawable

10
推荐指数
3
解决办法
9132
查看次数

Resources $ NotFoundException:如果您尝试使用的资源是矢量资源,则可能以不支持的方式引用它

我收到以下错误消息

android.content.res.Resources$NotFoundException: If the resource you are trying to use is a vector resource, you may be referencing it in an unsupported way. See AppCompatDelegate.setCompatVectorFromResourcesEnabled() for more info.
Run Code Online (Sandbox Code Playgroud)

当我试图设置以下内容时:

view.setBackgroundResource(R.drawable.highlight_background);
Run Code Online (Sandbox Code Playgroud)

要么

view.setBackgroundDrawable(ContextCompat.getDrawable(context, R.drawable.highlight_background));
Run Code Online (Sandbox Code Playgroud)

我也尝试使用AppCompatImage。这是在装有Android 4.4.4的设备上发生的。我发现了另一个StackOverflow线程,该线程可以添加

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
Run Code Online (Sandbox Code Playgroud)

进入MyApplication类,

    vectorDrawables.useSupportLibrary = true
Run Code Online (Sandbox Code Playgroud)

进入build.gradle。但是错误仍然发生。可绘制对象包括以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
   <stroke android:width="2dp" android:color="?attr/colorAccent" />
</shape>
Run Code Online (Sandbox Code Playgroud)

这只是包围图像的一条线。谁能帮我?

提前致谢!

android android-support-library androiddesignsupport android-support-design android-vectordrawable

10
推荐指数
1
解决办法
5165
查看次数

将android矢量可绘制XML转换为SVG

如何将我的 android vector drawable 转换为 SVG?不要将其标记为重复问题。我已经尝试过这些方法但没有奏效,我尝试过https://shapeshifter.design/网站,但实际上它很好,但它给了我错误的输入和输出。

假设我有一个向量

<vector android:height="80dp" android:viewportHeight="512"
    android:viewportWidth="512" android:width="80dp" xmlns:android="http://schemas.android.com/apk/res/android">

    <path android:fillColor="@color/colorLightYellow" android:pathData="M150.561,144.549c-1.315,0 -2.647,-0.341 -3.86,-1.06L52.164,87.532c-3.609,-2.136 -4.803,-6.793 -2.667,-10.402c2.137,-3.608 6.793,-4.802 10.402,-2.667l94.537,55.957c3.609,2.136 4.803,6.793 2.667,10.402C155.685,143.217 153.156,144.549 150.561,144.549z"/>
    <path android:fillColor="@color/colorLightYellow" android:pathData="M150.568,144.548H47.842c-4.194,0 -7.593,-3.399 -7.593,-7.593s3.4,-7.593 7.593,-7.593h102.727c4.194,0 7.593,3.399 7.593,7.593S154.762,144.548 150.568,144.548z"/>
    <path android:fillColor="@color/colorLightOrange" android:pathData="M342.693,335.833L207.961,136.955l51.811,-74.838c10.849,-15.671 -0.367,-37.077 -19.426,-37.077H118.183c-19.059,0 -30.275,21.406 -19.426,37.077l51.811,74.838L15.836,335.833C5.516,351.066 0,369.043 0,387.443l0,0c0,50.82 41.198,92.018 92.017,92.018h174.495c50.82,0 92.017,-41.198 92.017,-92.018l0,0C358.529,369.043 353.013,351.066 342.693,335.833z"/>
    <path android:fillColor="@color/colorLightOrange" android:pathData="M342.693,335.833L207.961,136.955l51.811,-74.838c10.849,-15.671 -0.367,-37.077 -19.426,-37.077h-22.144c17.303,0 27.486,21.406 17.637,37.077l-47.038,74.838L311.12,335.833c9.369,15.233 14.377,33.211 14.377,51.61c0,50.82 -37.402,92.018 -83.539,92.018h24.555c50.82,0 92.017,-41.198 92.017,-92.018C358.529,369.043 353.013,351.066 342.693,335.833z"/>
    <path android:fillColor="@color/colorLightYellow" android:pathData="M214.129,144.548h-71.883c-4.194,0 -7.593,-3.399 -7.593,-7.593s3.4,-7.593 7.593,-7.593h71.883c4.194,0 7.593,3.399 7.593,7.593S218.323,144.548 214.129,144.548z"/>
    <path android:fillColor="#FCAB29" android:pathData="M393.083,249.127c-65.571,0 -118.917,53.346 …
Run Code Online (Sandbox Code Playgroud)

svg png android android-drawable android-vectordrawable

10
推荐指数
3
解决办法
6356
查看次数

如何在 Jetpack Compose 中从矢量可绘制资源创建彩色图标?

我想在 Jetpack Compose 中实现“使用 Google 登录”按钮。我下载了这个 SVG并在 Inkscape 中添加了白色背景,因此它可以在推荐的样式(白色或蓝色按钮背景)中使用,然后将其导入资源中。

这是它在文本编辑器中的样子:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
  <path
      android:fillColor="#ffffff"
      android:pathData="M0,0h24v24h-24z"
      android:strokeWidth="0"
      android:strokeColor="#00000000"/>
  <path
      android:fillColor="#4285f4"
      android:pathData="m22.766,12.248c0,-0.724 -0.064,-1.412 -0.174,-2.081l-10.358,0l0,4.134l5.931,0c-0.266,1.357 -1.045,2.503 -2.2,3.282l0,2.75l3.538,0c2.072,-1.916 3.263,-4.739 3.263,-8.085z"
  />
  <path
      android:fillColor="#34a853"
      android:pathData="m12.234,23c2.97,0 5.454,-0.99 7.269,-2.668l-3.538,-2.75c-0.99,0.66 -2.246,1.063 -3.731,1.063 -2.869,0 -5.298,-1.934 -6.169,-4.547l-3.648,0l0,2.832c1.806,3.593 5.518,6.068 9.818,6.068z"
  />
  <path
      android:fillColor="#fbbc05"
      android:pathData="m6.065,14.099c-0.229,-0.66 -0.348,-1.366 -0.348,-2.099 0,-0.733 0.128,-1.439 0.348,-2.099l0,-2.832l-3.648,0c-0.752,1.485 -1.183,3.153 -1.183,4.932 0,1.778 0.431,3.447 1.183,4.932z"
  />
  <path
      android:fillColor="#ea4335"
      android:pathData="m12.234,5.354c1.623,0 3.071,0.559 4.217,1.65l3.135,-3.135c-1.898,-1.778 -4.382,-2.869 -7.352,-2.869 -4.299,0 -8.012,2.475 -9.818,6.068l3.648,2.832c0.871,-2.612 3.3,-4.547 6.169,-4.547z"
  />
</vector>
Run Code Online (Sandbox Code Playgroud)

我在像这样的按钮中使用它:

Button(onClick = { /*TODO*/ },) …
Run Code Online (Sandbox Code Playgroud)

android android-vectordrawable android-jetpack-compose

10
推荐指数
1
解决办法
3788
查看次数

AppCompatDrawableManager.get()vs VectorDrawableCompat.create()

我正在使用支持lib版本24.2.1,并启用了支持向量 AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

这些关于支持向量的函数有什么不同?我在用VectorDrawableCompat.create(getResources(), R.drawable.my_vector, null).但是这样在我的测试设备(Android 4.3)上生成一个drawable时,在编程上按钮上设置一个drawable就像这样:

button.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);

使用AppCompatDrawableManager.get().getDrawable(getActivity(), R.drawable.my_vector);(包装在状态列表选择器中)似乎工作正常,虽然我似乎无法找到它的文档.

android android-support-library android-vectordrawable

9
推荐指数
1
解决办法
3116
查看次数

Drawable Resource xml中的T​​int VectorDrawable

我有一个可选择的Button/ImageView的可绘制资源,如下所示:

<selector>
<item android:state_selected="true">
    <layer-list>
        <item>
            <shape android:shape="oval">
                <solid android:color="@color/blue"/>
            </shape>
        </item>
        <item>
            <bitmap
                android:src="@drawable/ic_icon"
                android:tint="@color/white"/>

        </item>
    </layer-list>
</item>
<item>
    <layer-list>
        <item>
            <shape android:shape="oval">
                <solid android:color="@color/background_unselected"/>
            </shape>
        </item>
        <item>
            <bitmap
                android:src="@drawable/ic_icon"
                android:tint="@color/icon_unselected"/>
        </item>
    </layer-list>
</item>
Run Code Online (Sandbox Code Playgroud)

因为我已切换到使用VectorDrawables,上述声明不起作用,因为我无法引用带<bitmap>标记的VectorDrawable .但据我所知,这是我可以给图标着色的唯一方法.

我也不能在代码中应用Colorfilter,因为这会使整个drawable而不仅仅是图标.

有什么建议?

android tint android-resources android-vectordrawable

9
推荐指数
1
解决办法
5359
查看次数

Android Resources$NotFoundException:无法找到资源 ID

我从 Firebase 收到一份活动报告,由于找不到我的资源而导致活动失败。我真的很困惑为什么找不到它,因为我相信所有文件都在正确的目录中,并且用户使用的是 Android v8.1,它并不古老,应该能够处理我认为有的东西自 v1.1 以来一直存在于 Android 中。

以下是异常链的最后几个堆栈:

Caused by android.content.res.Resources$NotFoundException: File res/drawable/button_close_24dp.xml from drawable resource ID #0x7f08006d
       at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:820)
       at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:630)
       at android.content.res.Resources.getDrawableForDensity(Resources.java:877)
       at ...

Caused by android.content.res.Resources$NotFoundException: Drawable (missing name) with resource ID #0x7f08006e


Caused by android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f08006e
       at android.content.res.ResourcesImpl.getResourceName(ResourcesImpl.java:253)
       at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:760)
       at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:630)
       at ...
Run Code Online (Sandbox Code Playgroud)

我认为这是抱怨res/drawable/button_close_24dp.xml丢失或找不到。我已经验证res/drawable/button_close_24dp.xml该项目中确实存在(并且它为我们拥有的数千名其他用户加载)。该 xml 文件只是一个简单的选择器文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" android:drawable="@drawable/button_close_grey_24dp" />
    <item android:drawable="@drawable/button_close_white_24dp" />
</selector>
Run Code Online (Sandbox Code Playgroud)

@drawable/button_close_grey_24dp有两个可能的版本:

  • /res/drawable/button_close_grey_24dp.png
  • /res/drawable-nodpi/button_close_grey_24dp.xml

该 …

android android-resources android-vectordrawable android-8.1-oreo

9
推荐指数
0
解决办法
1593
查看次数