| 163 | } |
| 164 | |
| 165 | public void drawPatch(Canvas canvas) { |
| 166 | canvas.save(); |
| 167 | |
| 168 | Point[] cubics = new Point[] { |
| 169 | new Point(30, 10), new Point(40, 20), new Point(50, 10), new Point(70, 30), |
| 170 | /* new Point(70, 30), */ new Point(60, 40), new Point(70, 50), new Point(50, 70), |
| 171 | /* new Point(50, 70), */ new Point(40, 60), new Point(30, 70), new Point(10, 50), |
| 172 | /* new Point(10, 50), */ new Point(20, 40), new Point(10, 30), /* new Point(30, 10) */ |
| 173 | }; |
| 174 | int[] colors = new int[] { 0xFFFF0000, 0xFF0000FF, 0xFFFFFF00, 0xFF00FFFF }; |
| 175 | |
| 176 | try (var paint = new Paint(); |
| 177 | var shader = Shader.makeLinearGradient( 0, 0, 70, 0, new int[] { 0xFF277da1, 0xFFffba08 });) |
| 178 | { |
| 179 | canvas.drawPatch(cubics, colors, paint); |
| 180 | canvas.translate(80, 0); |
| 181 | |
| 182 | paint.setShader(shader); |
| 183 | canvas.drawPatch(cubics, colors, paint); |
| 184 | canvas.translate(80, 0); |
| 185 | |
| 186 | canvas.drawPatch(cubics, colors, null, BlendMode.SRC_OVER, paint); |
| 187 | canvas.translate(80, 0); |
| 188 | |
| 189 | colors = new int[] {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}; |
| 190 | canvas.drawPatch(cubics, colors, paint); |
| 191 | canvas.translate(80, 0); |
| 192 | |
| 193 | Point[] texCoords = new Point[] { |
| 194 | new Point(0, 0), new Point(70, 0), new Point(70, 70), new Point(0, 70) |
| 195 | }; |
| 196 | canvas.drawPatch(cubics, colors, texCoords, paint); |
| 197 | canvas.translate(80, 0); |
| 198 | } |
| 199 | |
| 200 | canvas.restore(); |
| 201 | canvas.translate(0, 80); |
| 202 | } |
| 203 | |
| 204 | public void drawRotate(Canvas canvas) { |
| 205 | var stroke1px = new Paint().setStrokeWidth(1f); |