Fixed
Status Update
Comments
ni...@google.com <ni...@google.com>
ap...@google.com <ap...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 97bc777e1f44f3e93e0ab23563554a6136cbe3e0
Author: Nick Butcher <nickbutcher@google.com>
Date: Tue Oct 16 16:04:11 2018
Fix gradient bug in VectorDrawableCompat.
Test: VectorDrawableCompatTest
Bug: 117796719
Change-Id: I448b2868c26d37f2c51a09c072177e32f36805e1
M graphics/drawable/static/src/androidTest/java/androidx/vectordrawable/graphics/drawable/tests/VectorDrawableTest.java
A graphics/drawable/static/src/androidTest/res/drawable-nodpi/vector_icon_gradient_then_solid_golden.png
A graphics/drawable/static/src/androidTest/res/drawable/vector_icon_gradient_then_solid.xml
M graphics/drawable/static/src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java
https://android-review.googlesource.com/790377
https://goto.google.com/android-sha1/97bc777e1f44f3e93e0ab23563554a6136cbe3e0
Branch: androidx-master-dev
commit 97bc777e1f44f3e93e0ab23563554a6136cbe3e0
Author: Nick Butcher <nickbutcher@google.com>
Date: Tue Oct 16 16:04:11 2018
Fix gradient bug in VectorDrawableCompat.
Test: VectorDrawableCompatTest
Bug: 117796719
Change-Id: I448b2868c26d37f2c51a09c072177e32f36805e1
M graphics/drawable/static/src/androidTest/java/androidx/vectordrawable/graphics/drawable/tests/VectorDrawableTest.java
A graphics/drawable/static/src/androidTest/res/drawable-nodpi/vector_icon_gradient_then_solid_golden.png
A graphics/drawable/static/src/androidTest/res/drawable/vector_icon_gradient_then_solid.xml
M graphics/drawable/static/src/main/java/androidx/vectordrawable/graphics/drawable/VectorDrawableCompat.java
Description
===== DESCRIPTION =====
=======================
Consider the following vector drawable:
```
<vector xmlns:android="
xmlns:aapt="
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#f00"
android:pathData="M 0 0 h 12 v 12 h -12 v -12 z" />
<path
android:pathData="M 4 4 h 12 v 12 h -12 v -12 z"
android:strokeWidth="3">
<aapt:attr name="android:fillColor">
<gradient
android:endX="14.0"
android:endY="14.0"
android:startX="6.0"
android:startY="6.0"
android:type="linear">
<item
android:color="#0f0"
android:offset="0" />
<item
android:color="#00f"
android:offset="1" />
</gradient>
</aapt:attr>
<aapt:attr name="android:strokeColor">
<gradient
android:endX="14"
android:endY="14"
android:startX="6"
android:startY="6"
android:type="linear">
<item
android:color="#000"
android:offset="0" />
<item
android:color="#fff"
android:offset="1" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#0ff"
android:pathData="M 14 14 h 8 v 8 h -8 v -8 z"
android:strokeWidth="2"
android:strokeColor="#ff0" />
</vector>
```
=============================
===== EXPECTED BEHAVIOR =====
=============================
The vector is correctly rendered on API 28 (see the vector-drawable-gradient-bug-api28.png attachment).
===========================
===== ACTUAL BEHAVIOR =====
===========================
The vector is incorrectly rendered on API 22 (see the vector-drawable-gradient-bug-api22.png attachment).
=======================
===== SOURCE CODE =====
=======================
I believe the issue is in the following source code:
Specifically, if the fill/stroke is NOT a gradient, we need to set the fill/stroke paint's shader back to null so that it doesn't continue to use a shader used by a previous vector drawable path.
======================
===== OTHER INFO =====
======================
Tested using 'androidx.appcompat:appcompat:1.0.0' on API 22 and API 28.
I've attached a sample project that can be used to reproduce the issue to this bug report.
Please assign this bug to Nick Butcher (nickbutcher@google.com) as I know he was the one who wrote the backported vector drawable gradient code.