我想知道是否有更好的解决方案来制作如下图所示的弯曲条。
这是我的 flutter 代码:
import 'package:flutter_web/material.dart';
class CurvedBar extends StatelessWidget {
const CurvedBar({
Key key,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Container(height: 50,
color: Colors.orange,
child: Column(
children: <Widget>[
ClipRRect(
borderRadius: BorderRadius.only(
bottomLeft: Radius.circular(20.0),
bottomRight: Radius.circular(20.0)),
child: Container(
height: 20.0,
width: double.infinity,
color: Colors.white,
),
),
Container(
color: Colors.white,
child: Row(
children: <Widget>[
Flexible(
flex: 1,
child: ClipRRect(
borderRadius:
BorderRadius.only(topRight: Radius.circular(20.0)),
child: Container(
height: 20.0,
color: Colors.orange,
),
)),
Flexible(
flex: 1,
child: ClipRRect(
borderRadius:
BorderRadius.only(topLeft: Radius.circular(20.0)),
child: Container(
height: 20.0,
color: Colors.orange,
),
))
],
))
],
));
}
}
最佳答案
制作一个像这样的自定义 ShapeBorder 类(关键方法是 _getPath 返回形状的 Path):
class CustomShapeBorder extends ShapeBorder {
const CustomShapeBorder();
@override
Path getInnerPath(Rect rect, {TextDirection textDirection}) => _getPath(rect);
@override
Path getOuterPath(Rect rect, {TextDirection textDirection}) => _getPath(rect);
_getPath(Rect rect) {
final r = rect.height / 2;
final radius = Radius.circular(r);
final offset = Rect.fromCircle(center: Offset.zero, radius: r);
return Path()
..moveTo(rect.topLeft.dx, rect.topLeft.dy)
..relativeArcToPoint(offset.bottomRight, clockwise: false, radius: radius)
..lineTo(rect.center.dx - r, rect.center.dy)
..relativeArcToPoint(offset.bottomRight, clockwise: true, radius: radius)
..relativeArcToPoint(offset.topRight, clockwise: true, radius: radius)
..lineTo(rect.centerRight.dx - r, rect.centerRight.dy)
..relativeArcToPoint(offset.topRight, clockwise: false, radius: radius)
..addRect(rect);
}
@override
EdgeInsetsGeometry get dimensions {
return EdgeInsets.all(0);
}
@override
ShapeBorder scale(double t) {
return CustomShapeBorder();
}
@override
void paint(Canvas canvas, Rect rect, {TextDirection textDirection}) {
}
}
现在你可以像这样使用它:
Container(
margin: EdgeInsets.only(top: 80),
height: 50,
width: double.infinity,
decoration: ShapeDecoration(
shape: CustomShapeBorder(),
//color: Colors.orange,
gradient:
LinearGradient(colors: [Colors.blue, Colors.orange]),
shadows: [
BoxShadow(
color: Colors.black, offset: Offset(3, -3), blurRadius: 3),
],
),
),
结果:
关于 flutter 曲线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56723258/
一、环境变量右键点击我的电脑-属性:然后找到环境变量 1.Android的SDK不在C盘的话需要额外配这个到用户环境变量:ANDROID_HOMED:\AndroidSDK2.然后在系统变量:Path中添加一条这样的值 D:\Flutter\flutter\bin 这个值写flutter包解压的实际地址即可 3.在系统变量中添加两个镜像变量: 变量名:FLUTTER_STORAGE_BASE_URL 变量值:https://storage.flutter-io.cn 变量名:PUB_HOSTED_URL 变量
有一种用线指向图像特殊元素的效果。请参阅http://snapsvg.io/处的鳄鱼示例.最初出现图像时,没有任何指向线:然后滚动后出现带有提示的行:我知道有https://github.com/julianlloyd/scrollReveal.js以及很多其他的js库来实现出现的效果。问题是如何制作这条线,将它们放在普通图像(不是SVG)顶部的确切点上,并在滚动时为线条设置动画?如果知道这种方法/效果的名称(用谷歌搜索什么)并查看关于好/坏体验或js库的评论,那就太好了。更新:希望看到图像大小调整和精确指向的已解决问题,在大多数情况下,请参阅http://www.sitmed.com
我有一个包含4个值的数据集。[ABCD]。目前它们显示在条形图中,每个值一个条。现在,由于值c和d是平均值,我想将它们显示为a和b栏后面的线。d3可以吗?如何在同一个数据数组中切换条形或线形显示?感谢您的帮助。 最佳答案 我在这里发布了一个示例,因为没有一个答案在jsbin或jsfiddle等中提供了带线的条形图的工作示例。http://jsbin.com/gisinomo/1/edit该示例是d3wiki上简单条形图的一个分支。http://bl.ocks.org/mbostock/3885304CSSbody{font:10px
我正在尝试更改nvd3折线图的不同线条的颜色here但我无法理解该怎么做。我想将示例中两条线的颜色更改为绿色和青色。我试过了nv.addGraph(function(){varchart=nv.models.lineChart().useInteractiveGuideline(true).color(["rgb(0,255,0)","rgb(255,165,0)"]);}它适用于散点图here.但是折线图的颜色不会改变。任何建议。谢谢 最佳答案 你可以用这个!return[{values:data,//values-represe
如果X>100,我想更改此折线图的颜色我希望它变成“红色”有没有一种方法可以根据X的值在笔触颜色样式中使用条件?http://jsfiddle.net/iamjeannie/b445svob/1/enterlinkdescriptionherevarlineData=[{"x":1,"y":5},{"x":20,"y":20},{"x":40,"y":10},{"x":60,"y":40},{"x":80,"y":5},{"x":100,"y":60},{"x":120,"y":15},{"x":140,"y":40},{"x":160,"y":25},{"x":180,"y":20}
我正在使用D3.js创建面积图,并使用平滑线制作它。是否可以?在我的代码中,我只是创建了svg并放置了线条和区域。我使用虚拟数据。下面是我的代码:http://jsfiddle.net/sota0805/mv48H///DatavarlineData=[{"x":0,"y":250},{"x":40,"y":170},{"x":80,"y":140},{"x":120,"y":220},{"x":160,"y":220},{"x":200,"y":190},{"x":240,"y":170},{"x":280,"y":140},{"x":320,"y":200},{"x":360,"y
我正在使用RaphaelJS矢量库,但我无法获得正在绘制的线条(路径)以更改颜色。希望这只是我做的蠢事。varblue_one=paper.path("M205205L300300");blue_one.attr("stroke-width","3");blue_one.attr("fill","#0000FF");我还尝试了“#00F”、“blue”、“0000FF”和“00F”的填充值。 最佳答案 这是你要设置的。blue_one.attr("stroke","#0000FF");有关属性的完整列表,请参阅Specificati
我正在尝试制作这个https://massmoca.org/event/walldrawing340/在Javascript代码中,使用p5.js,但我不知道如何用线条填充这些形状。是否有任何其他可能性,比如制作圆形或类似的Canvas,或者我只需要分别制作每个形状?目前我是一个接一个地做,但是做三Angular形和梯形比较粗糙...varsketch=function(p){with(p){leth,w,space;p.setup=function(){createCanvas(900,400);h=height/2;w=width/3;space=10;noLoop();};p.d
哪个JS库最适合做以上类型的图表?我想将簇状柱形图与折线图结合起来,如上图所示。我的要求是每一列都应该有一个低值和高值集 最佳答案 为此请使用highcharts。请引用JSFiddle对于代码$(function(){varchart=newHighcharts.Chart({chart:{renderTo:"container",type:"column"},plotOptions:{series:{pointWidth:25},line:{marker:{type:'dot'}}},title:{text:null},seri
我正在使用EaselJS作为HTML5Canvas的API。我注意到下面的代码:line.graphics.setStrokeStyle(1).beginStroke("black").moveTo(100,100).lineTo(200,200);stage.addChild(line);...产生以下行:我将粗细设置为1-但线条仍然模糊。如果将快照放大,可以看到它实际上占据了3个像素。我相信我在某个地方读到Canvas在两个像素之间画了一个点,这样两个像素实际上都会被着色。您需要将绘制点的位置移动像素宽度的一半,使其落在整个像素上。我的应用程序需要清晰的图像,请指教。