flutter - Flutter - 自定义滑块值指示器。如何获取滑块的中心位置
问题描述
我正在尝试为颤振滑块实现自定义进度指示器。至于现在,我有绘制指标的给定代码。
class InsideSliderValueIndicator extends SliderComponentShape {
@override
Size getPreferredSize(bool isEnabled, bool isDiscrete) {
return Size.zero;
}
@override
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 sliderWidth = parentBox.size.width;
final sliderBoxOffset = parentBox.localToGlobal(Offset.zero);
labelPainter.paint(
context.canvas,
Offset(sliderBoxOffset.dx + sliderWidth / 2 - labelPainter.width / 2,
center.dy - labelPainter.height / 2));
}
}
我还自定义了滑块以移除拇指。这是它的样子:
这段代码的问题是它sliderBoxOffset
不返回“滑块”的框,而是返回父卡的框,center
实际上是滑块上拇指相对于父卡的位置。
所以我的问题是:如何从给定的参数中获得滑块的中心?
谢谢您的帮助
解决方案
我找到了一个适用于我的用例的奇怪解决方案
final sliderWidth = parentBox.size.width;
final halfSliderWidth = sliderWidth / 2;
final translateX = value < 0.5 ? halfSliderWidth - (value * sliderWidth) : halfSliderWidth - (value * sliderWidth);
labelPainter.paint(context.canvas, center.translate(translateX - labelPainter.width / 2, -labelPainter.height / 2));
但是,我很确定如果滑块不在其父项中居中,这将不起作用。我仍然想知道是否有一种不那么肮脏的方法来做到这一点。
推荐阅读
- string - WPML 如何处理替换 woocommerce 消息?
- java - 为什么 h.print_for() 会在 g.print_for() 正常工作时给出错误消息?
- python - 我怎样才能从右到左定位框架没有边距
- apache-spark - Spark master 无法远程启动工作人员,但工作人员在使用 ssh 时正常启动
- java - 调试用户应用程序中的错误。有可能的?
- javascript - Tailwind CSS:无法将 undefined 或 null 转换为对象 & getProcessedPlugins 不是函数
- histogram - Tableau:将多个时间相关直方图子集为多行和多列以适应屏幕
- django - 登录后 Django 不会重定向到个人资料页面。我的代码有什么问题?
- c++ - 'var' 的多重定义;obj/Class.o:(.bss+0x0): 首先定义在这里
- variables - 获取Lua中同名变量的内容