如何使用颤振画布在形状上“切一个洞”?我有一组相当复杂的形状,看起来像一个真实世界的物体。这个物体有一个洞,形状像一个圆角矩形。
我真的很想从一个形状中减去一个 RRect,但我找不到任何关于如何做到这一点的信息。
canvas.clipRRect(myRRect)只是删除未覆盖的所有内容myRRect。我想要相反的。即myRRect在当前画布形状或形状中制作形状孔。
我可以使用以下示例绘制半圆: Flutter how to draw semicircle (half circle)
但是,该Paint对象似乎只接受 a Color(using Paint.color)。我想添加一个RadialGradient或LinearGradient作为Color. 那可能吗?
Discrete with Custom Theme 我尝试改变拇指形状。但我想将拇指更改为图像。
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:math' as math;
import 'package:flutter/material.dart';
class SliderDemo extends StatefulWidget {
static const String routeName = '/material/slider';
@override
_SliderDemoState createState() => new _SliderDemoState();
}
Path _triangle(double size, Offset thumbCenter, {bool invert = false}) {
final Path thumbPath = new Path();
final double height = …Run Code Online (Sandbox Code Playgroud)我想用颤振构建一个如下图所示的有向图。我不知道从哪里开始。我在互联网上搜索没有成功。这种图形需要哪些算法?我尝试使用自定义画家类构建此图。我不知道如何在自定义画家类中使用自定义小部件。(例如,旁边有人物图片和文字的矩形)。我只能绘制矩形和线条......缩放和平移我认为我可以用 GestureDetector 类来做。该图应该是动态可定制的。
我已经尝试使用Canvas.clipPathwithGestureDetector就像画布上的橡皮擦一样,我在CustomPaint里面使用了Containerwith imageDecorationset,所以我想也许还有另一种解决方法,通过使用withCanvas.drawPath设置
final Paint _eraserPaint = Paint()
..color = Colors.transparent
..blendMode = BlendMode.clear
..strokeWidth = 8
..style = PaintingStyle.stroke
..isAntiAlias = true;
Run Code Online (Sandbox Code Playgroud)
但它画黑线而不是擦除
知道如何解决这个问题吗?
谢谢
有没有办法在 aWidget上的给定位置绘制a Canvas?
更具体地说,我想在实际小部件的前面单独绘制Marker与 a 相关的's的子小部件。这是创建一个可以做到这一点的尝试,但我无法弄清楚如何在画布上实际绘制小部件。使用requires a ,我不知道如何创建/检索:FlutterMapCanvasFlutterMapCustomPainterRenderObjectPaintingContext
class MarkerPainter extends CustomPainter {
MapController mc;
BuildContext context;
List<Marker> markers;
MarkerPainter(this.context, this.mc, this.markers);
@override
void paint(Canvas canvas, Size size) {
if( markers != null && markers.isNotEmpty ){
for(int i=0; i<markers.length; i++){
Marker marker = markers[i];
Offset o = myCalculateOffsetFromLatLng(marker.point, mc, context);
// Won't work, this needs a PaintingContext...
marker.builder(context).createElement().renderObject.paint(context, o);
}
}
}
@override
bool shouldRepaint(MarkerPainter oldDelegate) => oldDelegate.markers != …Run Code Online (Sandbox Code Playgroud) flutter flutter-layout flutter-widget flutter-canvas fluttermap
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_colorpicker/flutter_colorpicker.dart';
import 'dart:ui' as ui;
class EditImage extends StatefulWidget {
final String filePath;
EditImage({this.filePath});
@override
_EditImageState createState() => _EditImageState();
}
class _EditImageState extends State<EditImage> {
ui.Image decodedImage;
String newFilePath;
GlobalKey myCanvasKey = GlobalKey();
ImageEditor editor;
Color color = Colors.blue;
@override
void initState() {
loadImage(File(widget.filePath));
super.initState();
}
void loadImage(File image) async {
final data = await image.readAsBytes();
decodedImage = await decodeImageFromList(data);
editor = ImageEditor(image: decodedImage, strokeColor: color);
setState(() {});
}
@override
Widget build(BuildContext context) …Run Code Online (Sandbox Code Playgroud) 我正在尝试实现图像的圆形切口,并且我正在使用drawAtlas。这是到目前为止我的实现:
canvas.drawAtlas(
image!,
[
/* Identity transform */
RSTransform.fromComponents(
rotation: 0.0,
scale: 1,
anchorX: 0,
anchorY: 0,
translateX: 0,
translateY: 0,
)
],
[
Rect.fromCircle(
center: Offset(size.width / 2, size.height / 2),
radius: 200,
),
],
[],
null,
null,
Paint(),
);
Run Code Online (Sandbox Code Playgroud)
虽然它确实有效,但它绘制了一个矩形图像。我想用一些画出同一图像的圆形切口strokeWidth。使用drawAtlas可以做到这一点吗?
你好,谁能告诉我为什么这个掩蔽尝试的背景是黑色的。这一定很接近,但我就是无法消除背景。我看到其他人提到这saveLayer(rect, paint)是这里的关键,因为它将整个画布矩形推入遮罩操作。这个问题(没有屏蔽操作)和这个问题(没有实际答案)很相似,但对我来说没有用。
主程序.dart
import 'dart:typed_data';
import 'dart:ui' as ui;
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show rootBundle;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
ui.Image mask;
ui.Image image;
@override
void …Run Code Online (Sandbox Code Playgroud) 我有一个 CustomPainter,我想每隔几毫秒渲染一些项目。但我只想渲染自上次绘制以来发生变化的项目。我计划手动清除将在该区域内更改和重绘的区域。问题是每次调用paint() 时,Flutter 中的画布似乎都是全新的。我知道我可以跟踪整个状态并每次都重绘所有内容,但出于性能原因和特定用例并不可取。以下是可能代表该问题的示例代码:
我知道当画布大小改变时,一切都需要重新绘制。
import 'dart:async';
import 'dart:math';
import 'package:flutter/material.dart';
class CanvasWidget extends StatefulWidget {
CanvasWidget({Key key}) : super(key: key);
@override
_CanvasWidgetState createState() => _CanvasWidgetState();
}
class _CanvasWidgetState extends State<CanvasWidget> {
final _repaint = ValueNotifier<int>(0);
TestingPainter _wavePainter;
@override
void initState() {
_wavePainter = TestingPainter(repaint: _repaint);
Timer.periodic( Duration(milliseconds: 50), (Timer timer) {
_repaint.value++;
});
super.initState();
}
@override
Widget build(BuildContext context) {
return CustomPaint(
painter: _wavePainter,
);
}
}
class TestingPainter extends CustomPainter {
static const double _numberPixelsToDraw = 3;
final …Run Code Online (Sandbox Code Playgroud)