実現したいこと
自然なグラデーションが掛かった円弧ゲージを実装したい。
発生している問題・分からないこと
予め定義してあるSweepGradientの情報をインプットに、CustomPainterを用いて円弧ゲージの実装を行なってみたが、一部だけくっきりと色同士の境界線が見えてしまっている。
何故自然なグラデーションではなく、境目が見えてしまうようになっているのか、原因及び解決策が知りたい。
該当のソースコード
Flutter
1final gradient = SweepGradient( 2 colors: [ 3 Color(0xffF2E5BF), 4 Color(0xffF2E5BF), 5 Color(0xffFFFDF6), 6 Color(0xff948979), 7 ], 8 stops: [ 9 0.2, 10 0.25, 11 0.4, 12 0.6, 13 ], 14 transform: GradientRotation(1.57), 15); 16 17 18~省略~ 19 20@override 21 Widget build(BuildContext context) { 22 return Scaffold( 23 body: Stack( 24 children: [ 25 // GaugePainter 26 Positioned( 27 left: 368, 28 top: 88, 29 child: CustomPaint(painter: GaugePainter(), size: Size(730, 730)), 30 ), 31 ], 32 ), 33 ); 34 } 35 36class GaugePainter extends CustomPainter { 37 @override 38 void paint(Canvas canvas, Size size) { 39 const strokeWidth = 18.0; 40 final center = Offset(size.width / 2, size.height / 2); 41 final radius = (size.width / 2) - (strokeWidth / 2); 42 final rect = Rect.fromCircle(center: center, radius: radius); 43 44 final paint = 45 Paint() 46 ..style = PaintingStyle.stroke 47 ..strokeWidth = strokeWidth 48 ..strokeCap = StrokeCap.butt 49 ..shader = gradient.createShader( 50 Rect.fromCircle(center: center, radius: radius), 51 ); 52 // 色同士の境界線が見えてしまう 53 canvas.drawArc(rect, _degreeToRad(0), _degreeToRad(360), false, paint); 54 } 55 56 double _degreeToRad(double degree) => degree * pi / 180; 57 58 @override 59 bool shouldRepaint(GaugePainter oldDelegate) => false; 60} 61
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
グラデーションの変数(gradient)の中身に原因があるのか、もしくはその他の実装部分に原因があるのかが知りたい。
あまり変数(gradient)の中身は変更したくはないが、そこで設定されている数値(stop)や色が原因の場合は教えていただきたいです。
補足
特になし

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。