欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > flutter实践:比例对比线图实现

flutter实践:比例对比线图实现

2025/5/9 11:06:51 来源:https://blog.csdn.net/Noodles_ck/article/details/147550388  浏览:    关键词:flutter实践:比例对比线图实现

需求:flutter实现一个左右对比线图,带有动画效果

效果图:

Widget _buildTop() {return Container(height: themeData.heightXl,padding: EdgeInsets.symmetric(horizontal: themeData.hSpacingMd),child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,crossAxisAlignment: CrossAxisAlignment.center,children: [TdxText((module.sellSum > 0? (module.sellSum / (module.buySum + module.sellSum) * 100).toStringAsFixed(2): "--") +"%",textColor: themeData.colorTextDown,),SizedBox(width: themeData.hSpacingSm,),Expanded(child: ClipRRect(borderRadius: BorderRadius.circular(themeData.radiusMd),child: LayoutBuilder(builder: (context, constraints) {return AnimatedBuilder(animation: _animationController,builder: (context, child) {return CustomPaint(size: Size(constraints.maxWidth, 6),painter: TdxHqggWdpkHistogramPainter(percent: _progressAnimation.value),);},);},),),),SizedBox(width: themeData.hSpacingSm,),TdxText((module.buySum > 0? (module.buySum / (module.buySum + module.sellSum) * 100).toStringAsFixed(2): "--") +"%",textColor: themeData.colorTextUp,),],),);}
class TdxMarketHistogramPainter extends CustomPainter {//涨所占比例final percent;TdxMarketHistogramPainter({required this.percent,});@overridevoid paint(Canvas canvas, Size size) {//涨---进度条var paint1 = Paint()..style = PaintingStyle.fill..color = uiCommonConfig.colorTextUp;var path1 = Path()..moveTo(0, 0)..lineTo(max(size.width * percent, 0), 0)..lineTo(max(size.width * percent - 8, 0), size.height)..lineTo(0, size.height);//灰色区域var paint2 = Paint()..style = PaintingStyle.fill..color = uiCommonConfig.colorTextSecondary;var path2 = Path()..moveTo(max(size.width * percent + 4, 0), 0)..lineTo(max(size.width * percent + 10, 0), 0)..lineTo(size.width * percent + 2, size.height)..lineTo(max(size.width * percent - 4, 0), size.height);//跌---进度条var paint3 = Paint()..style = PaintingStyle.fill..color = uiCommonConfig.colorTextDown;var path3 = Path()..moveTo(size.width * percent + 14, 0)..lineTo(size.width, 0)..lineTo(size.width, size.height)..lineTo(size.width * percent + 6, size.height);//绘制canvas.drawPath(path1, paint1);canvas.drawPath(path2, paint2);canvas.drawPath(path3, paint3);}@overridebool shouldRepaint(TdxMarketHistogramPainter oldDelegate) => true;@overridebool shouldRebuildSemantics(TdxMarketHistogramPainter oldDelegate) => true;
}
late AnimationController _animationController; //动画控制器
late Animation _progressAnimation; //进度条动画
double oldRisePercnet = 0.5; //涨所占比例(旧)
double risePercnet = 0.5; //涨所占比例
void initAnimation() {//下面几个值需要初始化int totalCount = module.buySum + module.sellSum; //买卖总量_animationController = AnimationController(duration: const Duration(milliseconds: 300), vsync: this);risePercnet = module.sellSum != 0 ? module.sellSum / totalCount : 0.5;_progressAnimation = Tween(begin: oldRisePercnet, end: risePercnet).animate(_animationController);//执行动画_animationController.forward();oldRisePercnet = risePercnet;if (module.buySum > 0 && module.sellSum > 0) {module.updateDisplay();}}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词