我刚刚转移到 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的大部分资源从用于不同分辨率的不同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)上的图标将被拉伸以填充屏幕,而不是左/右侧的图标.有没有办法指定图标的宽度?
我们可以通过使用重复绘制 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?
您好我的自定义视图:
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.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
如何将我的 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) 我想在 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) 我正在使用支持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);(包装在状态列表选择器中)似乎工作正常,虽然我似乎无法找到它的文档.
我有一个可选择的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而不仅仅是图标.
有什么建议?
我从 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