battle_path.dart 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import 'dart:ui';
  2. import 'constant.dart';
  3. ///本质是求五个点的位置,依次lineTo起来形成一条路径
  4. Path fromBottomToCenter(Size size, int start, int end) {
  5. final path = Path();
  6. final double line = size.width * kButtonLineAspectRatio;
  7. final double l1 = size.width * kBottomButtonLeftAspectRatio;
  8. final double r1 = size.width * kBottomButtonRightAspectRatio;
  9. final double t1 = size.height * kBottomButtonTopAspectRatio;
  10. final double b1 = size.height * kBottomButtonBottomAspectRatio;
  11. final double l2 = size.width * kRightButtonLeftAspectRatio;
  12. final double r2 = size.width * kRightButtonRightAspectRatio;
  13. final double t2 = size.height * kRightButtonTopAspectRatio;
  14. final double b2 = size.height * kRightButtonBottomAspectRatio;
  15. final double cr = size.width * kRightButtonRightAspectRatio;
  16. final double cb = size.height * kBottomButtonTopAspectRatio;
  17. final double spacing1 = ((r1 - l1) - line * 6) / 5 + line;
  18. final double spacing2 = ((b2 - t2) - line * 6) / 5 + line;
  19. final double p1x = l1 + spacing1 * start + line / 2;
  20. final double p1y = b1 - line * 3 / 2;
  21. final double p2x = p1x;
  22. final double p2y = t1 + line / 2;
  23. final double p3x = r2 - line / 2;
  24. final double p3y = t2 + spacing2 * end + line / 2;
  25. final double p4x = l2 + line / 2;
  26. final double p4y = p3y;
  27. path.moveTo(p1x, p1y);
  28. path.lineTo(p2x, p2y);
  29. assert(cr - line / 2 == p3x);
  30. assert(p2y == cb + line / 2);
  31. path.lineTo(cr - line / 2, p2y);
  32. path.lineTo(p3x, cb + line / 2);
  33. path.lineTo(p3x, p3y);
  34. path.lineTo(p4x, p4y);
  35. return path;
  36. }
  37. double getButtonSize(Size size) {
  38. return kButtonAspectRatio * size.width;
  39. }