首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Flutter中绘制带有圆角矩形轨迹的滑块?

在Flutter中绘制带有圆角矩形轨迹的滑块,可以通过自定义绘制来实现。以下是一个示例代码,展示了如何在Flutter中绘制带有圆角矩形轨迹的滑块:

代码语言:txt
复制
import 'package:flutter/material.dart';

class RoundedSlider extends StatefulWidget {
  @override
  _RoundedSliderState createState() => _RoundedSliderState();
}

class _RoundedSliderState extends State<RoundedSlider> {
  double _value = 0.0;

  @override
  Widget build(BuildContext context) {
    return SliderTheme(
      data: SliderTheme.of(context).copyWith(
        trackShape: RoundedRectSliderTrackShape(),
        trackHeight: 4.0,
        thumbShape: RoundSliderThumbShape(enabledThumbRadius: 12.0),
        overlayShape: RoundSliderOverlayShape(overlayRadius: 20.0),
      ),
      child: Slider(
        value: _value,
        onChanged: (newValue) {
          setState(() {
            _value = newValue;
          });
        },
      ),
    );
  }
}

class RoundedRectSliderTrackShape extends SliderTrackShape {
  Rect getPreferredRect({
    @required RenderBox parentBox,
    Offset offset = Offset.zero,
    @required SliderThemeData sliderTheme,
    bool isEnabled = false,
    bool isDiscrete = false,
  }) {
    final double trackHeight = sliderTheme.trackHeight;
    final double trackLeft = offset.dx + 10.0;
    final double trackTop = offset.dy + (parentBox.size.height - trackHeight) / 2;
    final double trackWidth = parentBox.size.width - 20.0;
    return Rect.fromLTWH(trackLeft, trackTop, trackWidth, trackHeight);
  }
}

class RoundSliderThumbShape extends SliderComponentShape {
  final double enabledThumbRadius;

  const RoundSliderThumbShape({
    this.enabledThumbRadius = 10.0,
  });

  Size getPreferredSize(bool isEnabled, bool isDiscrete) {
    return Size.fromRadius(enabledThumbRadius);
  }

  void paint(
    PaintingContext context,
    Offset center, {
    Animation<double> activationAnimation,
    Animation<double> enableAnimation,
    bool isDiscrete,
    TextPainter labelPainter,
    RenderBox parentBox,
    SliderThemeData sliderTheme,
    TextDirection textDirection,
    double value,
  }) {
    final Canvas canvas = context.canvas;
    final Paint paint = Paint()
      ..color = sliderTheme.thumbColor
      ..style = PaintingStyle.fill;
    canvas.drawCircle(center, enabledThumbRadius, paint);
  }
}

class RoundSliderOverlayShape extends SliderComponentShape {
  final double overlayRadius;

  const RoundSliderOverlayShape({
    this.overlayRadius = 20.0,
  });

  Size getPreferredSize(bool isEnabled, bool isDiscrete) {
    return Size.fromRadius(overlayRadius);
  }

  void paint(
    PaintingContext context,
    Offset center, {
    Animation<double> activationAnimation,
    Animation<double> enableAnimation,
    bool isDiscrete,
    TextPainter labelPainter,
    RenderBox parentBox,
    SliderThemeData sliderTheme,
    TextDirection textDirection,
    double value,
  }) {
    final Canvas canvas = context.canvas;
    final Paint paint = Paint()
      ..color = sliderTheme.overlayColor
      ..style = PaintingStyle.fill;
    canvas.drawCircle(center, overlayRadius, paint);
  }
}

在上述示例代码中,我们创建了一个自定义的RoundedSlider组件,继承自StatefulWidget。在build方法中,我们使用SliderTheme来自定义滑块的外观。通过SliderThemeData,我们可以设置滑块的轨道形状、轨道高度、滑块形状和滑块覆盖物形状。

RoundedRectSliderTrackShape类继承自SliderTrackShape,用于绘制圆角矩形形状的滑块轨道。在getPreferredRect方法中,我们计算出轨道的位置和尺寸。

RoundSliderThumbShape类继承自SliderComponentShape,用于绘制圆形滑块。在paint方法中,我们使用Canvas绘制一个圆形滑块。

RoundSliderOverlayShape类继承自SliderComponentShape,用于绘制滑块的覆盖物。在paint方法中,我们使用Canvas绘制一个圆形覆盖物。

最后,我们在Slider组件中使用自定义的SliderThemeRoundedSlider来展示带有圆角矩形轨迹的滑块。

这是一个基本的示例,你可以根据自己的需求进行修改和扩展。关于Flutter的更多信息和相关产品介绍,你可以访问腾讯云的官方文档:腾讯云Flutter开发指南

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Qt编写自定义控件42-开关按钮

为了能够涵盖两大类开关按钮,特意将常见四种类型(圆角矩形/内圆形/外圆形/图片)都集成到了自定义开关按钮。...产生滑动效果采用定时器绘制方式,自动计算滑块X轴开始坐标,当滑块X轴开始坐标到达滑块X轴结束坐标时停止定时器。...二、实现功能 1:可设置开关按钮样式 圆角矩形/内圆形/外圆形 2:可设置选中和未选中时背景颜色 3:可设置选中和未选中时滑块颜色 4:可设置显示文本 5:可设置滑块离背景间隔 6:可设置圆角角度...圆角矩形/内圆形/外圆形 * 2:可设置选中和未选中时背景颜色 * 3:可设置选中和未选中时滑块颜色 * 4:可设置显示文本 * 5:可设置滑块离背景间隔 * 6:可设置圆角角度...READ getTextOn WRITE setTextOn) public: enum ButtonStyle { ButtonStyle_Rect = 0, //圆角矩形

2.3K10

自定义View【1】

今天我们就到代码层次来看下如何实现和使用自定义View吧 自定义流程 ---- 在前面的文章我们已经学习了Flutter自定义View简单步骤,今天我们就按照这个步骤来实现下自定义View。...paint方法就是Flutter负责View绘制地方,使用传递来canvas和size即可完成对目标View绘制。...canvas中有多个与绘制相关方法,drawLine()、drawRect()、drawOval()、drawOval()、等方法。...绘制圆角矩形drawDRRect drawRRect(RRect rrect, Paint paint) 其实使用起来也是非常简单,使用RRect确定矩形大小及弧度,使用paint来完成绘制。...绘制圆角矩形drawRRect drawDRRect(RRect outer, RRect inner, Paint paint) 和drawRRect类似,使用RRect确定内部、外部矩形大小及弧度

93810
  • Flutter 流体滑块

    下面的演示视频显示了如何在颤动创建流畅滑块。它显示了如何在flutter应用程序中使用flutter_fluid_slider软件包来工作流体滑块传送带。...传递值将是滑块开始更改之前最后一个[value]。 value: 此属性是必需,并且用于此滑块的当前选定值。在与该值相对应位置上绘制滑块拇指。...另外,我们将添加滑块颜色。当我们运行应用程序时,我们应该获得屏幕输出,屏幕下方截图所示。 img 现在,我们将创建另一个FluidSlider()。...当我们运行应用程序时,我们应该获得屏幕输出,屏幕下方截图所示。 img 现在,我们将创建第三个“流体”滑块。...在此滑块,我们将在value方法添加一个变量,滑块颜色,onChanged,mapValueToString表示将双精度值映射到String文本回调函数。

    11.7K20

    条码软件绘制图形并填充

    专业条码软件都有图形绘制工具,可以在标签上添加各种图形,比如:三角形、矩形圆角矩形、圆形、菱形、五角星等。这些图形可以使标签设计更加美观。下面就给大家详细介绍这些图形绘制和填充。...在软件每一种图形都有对应工具,选择相应图形工具,就可以在画布上绘制图形。例如我们选择五角星形,在画布上绘制一个五角星,勾选显示线条,可以设置线条粗细、样式、颜色等。...这里小编选择渐变填充,并设置起始 02.png 渐变方向还可以选择自定义角度,拖动滑块来设置角度。 03.png 下图中圆形小编选择了阴影填充,软件提供了很多效果,您可以根据需要自行选择。...这种方法同样适合其他图形,三角形,矩形,菱形等。 04.png 综上所述就是在条码软件绘制图形并填充方法,想要了解更多有关条码标签信息,请持续关注我们。

    58930

    Flutter 专题】35 自定义 View 之 Canvas (二)

    drawImage 绘制图片 drawImage 用于绘制图片,绘制图片是重点,此时 Image 并非日常所用图片加载,而是用 dart.ui 类 ui.Image 并转换成字节流 ImageStream...drawImageRect 绘制矩形图片 drawImageRect 除了可以正常绘制图片之外,还可以绘制图片部分内容,如下:第一个参数为 ui.Image,第二个参数为需要原图绘制矩形范围,第三个参数为本次绘制矩形范围...drawImageNine 绘制九图 drawImageNine 同样用来绘制图片,与原图绘制方式不同在于,drawImageNine 第二个参数矩形变长延伸将原图分割为九部分,划为中心区域,第三个参数矩形绘制整体矩形范围...clipRect 裁剪矩形 clipRect 可以在规定矩形内进行绘制,超出范围不绘制; canvas.clipRect(Rect.fromLTWH(30, 1200, Screen.width /...clipRRect 裁剪圆角矩形 clipRRect 可以在规定圆角矩形内进行绘制,超出范围不绘制; canvas.clipRRect( RRect.fromRectXY(

    2.5K41

    iOS 9人机界面指南(四):UI元素(下)- 腾讯ISUX

    日期时间选择器 4.3.4 详情展开按钮 4.3.5 信息按钮 4.3.6 标签 4.3.7 网络活动指示器 4.3.8 页面控件 4.3.9 选择器 4.3.10 进度视图 4.3.11 刷新控件 4.3.12圆角矩形按钮...4.3.12圆角矩形按钮 iOS7及更新版本已经不再使用圆角矩形按钮,而是使用了新系统按钮——类型为UIButtonTypeSystemUI按钮 (UIButton) 。...API提示: 想要了解更多如何在代码定义滑块,可以参考 Sliders 滑块: 由一条水平轨迹和一个Thumb(滑块中支持用户水平拖拽圆形控件)组成 左边和右边支持使用自定义图片来表述相对最小值与最大值含义...如果合适的话,自定义滑块外观。比如,你可以: 定义Thumb外观,让用户一看就知道滑块当前状态 在轨迹左右两端使用自定义图片来告诉用户滑块最小值和最大值所代表含义。...比如说,一个图调整图片尺寸滑块可以在最小值左边放一张小图,在最大值右边放一张大图。 根据Thumb所在位置和当前滑块状态来为滑块轨迹定义不同颜色 不要使用滑块来显示音量控制。

    13.2K30

    Flutter】滑动效果评价组件

    Flutter」是GoogleUI工具包,可通过一个代码库构建漂亮,本机编译移动,Web和桌面应用程序。 在在本博客,我们将探讨「Flutter**Reviews Slider。...**我们将看到如何在flutter应用程序中使用「reviews_slider」包来实现带有生动变化微笑演示程序Reviews Slider演示程序。...pub地址:https://pub.dev/packages/reviews_slider 评论滑块 评论滑块是一个带有变化微笑动画小部件,用于收集用户调查得分。...该演示视频演示了如何在flutter中使用评论滑块。它显示了使用「Flutter」应用程序「reviews_slider」包,评论滑块将如何工作。...当我们运行应用程序时,我们应该获得屏幕输出,屏幕下方截图所示。

    4.5K50

    Flutter 专题】13 通过丑丑【签到】页面学习以下【权重比例】重要性

    绘制圆形 和尚为了页面稍微美观一点,准备用圆形来替换普通按钮,和尚发现 Flutter 提供了很多便捷绘制圆形方式,比 Android 要方便很多。...和尚测试时用到了如下两种: ClipOval ClipOval 是一个很强大裁剪子控件为椭圆或圆角控件;子控件没有特殊限制。...同时衍生出其他几种裁剪方式: CustomClipper:可以创建自定义裁剪方式; ClipRect:可以裁剪不同宽高比例,通过 heightFactor 属性来处理; ClipRRect:可以设置圆角矩形或圆形...), // 子控件为 Container // child: new Container( color: Colors.redAccent, ), ), ), // 圆角矩形...,Flutter 直接提供绘制圆形控件,可添加背景色及背景图;且在加载网络图片时,网络状态不佳或图片有问题时只显示背景色,更人性化。

    1.2K51

    【愚公系列】2023年11月 WPF控件专题 Rectangle控件详解

    一、Rectangle控件详解Rectangle控件是WPF中用于绘制矩形形状控件。它可以在UI中用于多种用途,绘制边框和填充区域等。...除了上述属性,Rectangle控件还有其他一些常用属性,:RadiusX和RadiusY:用于设置圆角横向和纵向半径;Stretch:用于指定如何拉伸或缩放矩形以适应其父元素;Opacity:用于设置透明度...例如,以下是一个带有圆角和填充透明度Rectangle控件:这将创建一个100x100蓝色矩形带有10像素半径圆角、黑色描边和2像素线条宽度,以及50%不透明度。...2.常用场景WPFRectangle控件常用于以下场景:绘制矩形图形:Rectangle控件可以用于绘制矩形图形并设置矩形颜色、边框等属性。

    57731

    组合与自绘,我该选用何种方式自定义Widget?

    这种方式,对外暴露接口比较少,减少了上层使用成本,但也因此增强了控件复用性。在Flutter,组合思想始终贯穿在框架设计之中,这也是Flutter提供了如此丰富控件库原因之一。...ClipRRect可以将其子Widget按照圆角矩形规则进行裁剪,所以用 ClipRRect 将Image包装起来,就可以实现图片圆角功能了。...在原生iOS开发,我们可以继承UIView,在drawRect方法里进行绘制操作。其实,在Flutter也有类似的方案,那就是CustomPaint。...在Flutter,画布是Canvas,画笔则是Paint,而画成什么样子,则由定义了绘制逻辑CustomPainter来控制。...CustomPainter是真实绘制逻辑封装,在其paint方法,我们可以使用不同类型画笔Paint,利用画布Canvas提供不同类型绘制图形能力,实现控件自定义绘制

    1.8K20

    Flutter 专题】33 自定义 View 之 Canvas (一)

    和尚最近在学习自定义 View,刚了解了一下 Paint 画笔神奇之处,现在学习一下 Canvas 画布神秘之处。Flutter 提供了众多绘制方法,和尚接触不深,尽量都尝试一下。...drawRect 绘制矩形 drawRect 用来绘制矩形Flutter 提供了多种绘制矩形方法: Rect.fromPoints 根据两个点(左上角点/右下角点)来绘制; Rect.fromLTRB...drawRRect 绘制圆角矩形 drawRRect 绘制圆角矩形Flutter 提供了多种绘制方法: RRect.fromLTRBXY 前四个参数用来绘制矩形位置,剩余两个参数绘制固定 x/y 弧度...第一个参数绘制矩形,可以用上面介绍多种矩形绘制方式,最后一个参数绘制 Radius 弧度; RRect.fromRectAndCorners第一个参数绘制矩形,可以用上面介绍多种矩形绘制方式,剩余四个可选择参数...drawDRRect 绘制嵌套矩形 drawDRRect 绘制嵌套矩形,第一个参数为外部矩形,第二个参数为内部矩形,可用上述多种设置圆角矩形方式;最后一个参数为 Paint 画笔,且 PaintingStyle

    1.1K41

    可视化神器Plotly玩转股票图

    中间矩形称为实体,实体以上细线叫上影线,实体以下细线叫下影线。 1、红色上涨: ? 2、绿色下跌 ? 3、持平状态 ?...绘制OHLC图 绘图数据 在本文中很多图形都是基于Plotly自带一份关于苹果公司AAPL股票数据绘制,先看看具体数据长什么样子:利用pandas读取网站在线csv文件 # 读取在线csv文件...上面图中红色部分就是悬停信息 基于时间序列 绘图数据 下面开始介绍是如何绘制基于时间序列time series股票图形,使用是Plotly自带股票数据: stocks = px.data.stocks...滑块和时间按钮结合 除了滑块,我们还可以在图形还可以设置按钮进行选择: import plotly.express as px import pandas as pd df = pd.read_csv...master/finance-charts-apple.csv') fig = px.line( df, x='Date', y='AAPL.High', title='带有滑块和按钮时间序列绘图

    6.4K71

    Flutter 专题】56 自定义 BubbleWidget 气泡插件

    和尚在学习时想要用到气泡效果,为了更加灵活,和尚封装了一个简单气泡插件,方便日常使用; 和尚准备用 Canvas drawPath 进行绘制,主要分为三个部分,圆角弧线,...绘制圆角 首先在边角处绘制四个圆弧,直接用 arcTo 即可,需要注意是:和尚整体以 drawPath 方式实现,准备从左上角开始顺时针绘制,所以绘制圆弧时也是顺时针方向; void arcTo...rect.left, rect.top, rect.right, rect.bottom, startAngle, sweepAngle, forceMoveTo); } 和尚理解,Rect 为绘制圆角矩形...,包括位置及大小;startAngele 为起始角度;sweepAngle 为绘制弧形角度;和尚需要四个圆弧大小均为 pi/2,只需调整矩形位置与起始角度即可; // 逆时针 canvas.drawPath...绘制连线 最后就是将处理好连接起来,和尚为了适应更多场景,尖角位置也可自由配置,长度为到圆角距离,默认为边框中间位置; 尖角在顶部时,距离为左上圆角结束点边距; 尖角在右侧时,距离为右上圆角结束点边距

    1.6K41

    Qt开源作品25-电池电量控件

    一、前言 现在这个时代,智能手机不要太流行,满大街都是,甚至连爷爷奶奶级别的人都会用智能手机,本次要写控件就是智能手机电池电量表示控件,采用纯painter绘制,其实也可以采用贴图,我估计大部分手机上都是采用贴图形式...至于本控件没有任何技术难点,就是自动计算当前设置电量,根据宽度比例划分100个等分,每个等分占用多少个像素,然后电量*该比例就是要绘制电量区域,可以设置报警电量,低于该变量整个电池电量区域红色显示...主要功能: 可设置开关按钮样式 圆角矩形/内圆形/外圆形 可设置选中和未选中时背景颜色 可设置选中和未选中时滑块颜色 可设置显示文本 可设置滑块离背景间隔 可设置圆角角度 可设置是否显示动画过渡效果...二、代码思路 void Battery::paintEvent(QPaintEvent *) { //绘制准备工作,启用反锯齿 QPainter painter(this);...(&painter); //绘制背景 drawBg(&painter); //绘制头部 drawHead(&painter); } void Battery::drawBorder

    1.4K30

    Flutter使用Canvas实现精美表盘效果

    前言 上个月参加掘金创作者训练营时,发现训练营一位兄弟通过 css3 实现了一个精美的表盘,效果看着确实不错很漂亮,跟 UI 做设计图差不多了, 当时就在想能不能在 Flutter 实现一个同样效果...DialPainter paint 实现,其中 shouldRepaint 是指父控件重新渲染时是否重新绘制,这里设置为 true 表示每次都重新绘制。...效果如下: 分针 分针绘制相对比较简单,因为分针就一个圆角矩形,使用画布 drawRRect 方法即可: double hourHalfHeight = 0.4 * unit; double minutesLeft...,这里需要注意是分针尾部是超过了中心大圆点,所以这里 left 需要向左偏移一定单位: 这里为了看到分针效果,将时针隐藏掉了 秒针 秒针分为四部分:尾部弧形、尾部圆角矩形、细针、中心圆点: 实现代码...将圆弧、圆角矩形、三角形、中心圆形组合起来,计算坐标同样是以圆盘中心为圆点,所有同样需要使用 translate 移动画布圆点后绘制

    1.4K30

    HTML5-Canvas初探(1)

    HTML5 canvas 元素使用 JavaScript 在网页上绘制图像。 画布是一个矩形区域,您可以控制其每一像素。 canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像方法。...对于有些浏览器是不支持canvas功能,我们可以直接在canvas标签写一些替换内容,在浏览器不支持canvas时显示: ---- 接着在聊如何在canvas上绘图前,咱得先说说.getContext...,canvas也一样,想要运动路径轨迹能有视觉效果,需要使用相应上色/描边方法 ---- 自此我们很轻松地绘制了一条黑色直线,但如果我们想要绘制一条红色或者其它颜色线段,该怎么做呢?...我们画三条红色线段吧: 注释都说很清楚了,故不再赘述实现原理,其效果如下: 注意在开始绘制路径时候,一定要加上moveTo(x,y),否则第一个lineTo()运动轨迹将不计入绘图中(浏览器会认为没获取到该运动轨迹起始点...“butt”和”square”区别,但懂得使用AI绘制矢量同学们应该比较了解: ⑵ lineJoin则是设定折线交接处外角类型,其值可为: miter 默认,折线交接处为尖角 round 折线交接处为圆角

    1.4K20

    ​打开Flutter动画另一种姿势——Flare

    开头 日常开发过程我们时常能遇到 动画 需求,flutter中使用动画方式主要分为三种: 1.通过 AnimationController 及各种 Animation(线性动画TweenAnimation...默认为 public 绘制动画 之后则可以开始动画制作了,以一个简单按钮为例: 选择矩形工具: [1240] 画完一个矩形后,点击左侧资源区 Artboard 画板,在右侧调整其Size大小: [1240...] 接着调整所绘制矩形属性: [1240] 接下来,点击左侧资源区 ANIMATE 进入动画设计模式,该模式下,无法增加或删除资源文件,点击矩形,在右侧记录 矩形大小与矩形圆角 在初始帧属性: [... loading ,这时候绘制界面会停留在上一个动画最后一帧,所以可以事先把时间选择器放在第一帧上。...结尾 以上,都只是flutter魅力冰山一角,使用flutter不仅可以极大提高开发效率,还能带来美好开发体验。 希望未来开发过程,UI设计师可以使用Flare这项工具。

    2K30
    领券