贝塞尔曲线切割 已经对知识点有了解,这里我们主要就是加大一些难度,作个更复杂的贝塞尔裁切出来

波浪形式的贝塞尔曲线 - 图1

主入口文件main.dart

  1. import 'package:flutter/material.dart';
  2. import 'custom_clipper.dart';
  3. void main() => runApp(MyApp());
  4. class MyApp extends StatelessWidget {
  5. @override
  6. Widget build(BuildContext context) {
  7. return MaterialApp(
  8. title:'Flutter Demo',
  9. debugShowCheckedModeBanner: false,
  10. theme:ThemeData(
  11. primarySwatch: Colors.blue,
  12. ),
  13. home:HomePage()
  14. );
  15. }
  16. }

custom_clipper.dart

这里要要改造贝塞尔曲线切割 ,作一个波浪形的贝塞尔裁切。波浪形式的只要把裁切变成两个对称的贝塞尔曲线就可以实现了。代码如下

  1. import 'package:flutter/material.dart';
  2. class HomePage extends StatelessWidget {
  3. @override
  4. Widget build(BuildContext context) {
  5. return Scaffold(
  6. body: Column(
  7. children: <Widget>[
  8. ClipPath(
  9. clipper: BottomClipperTest(),
  10. child: Container(
  11. color: Colors.lightGreen,
  12. height: 200.0,
  13. ),
  14. )
  15. ],
  16. ));
  17. }
  18. }
  19. class BottomClipperTest extends CustomClipper<Path> {
  20. @override
  21. Path getClip(Size size) {
  22. var path = Path();
  23. path.lineTo(0, size.height - 20);
  24. var firstControlPoint = Offset(size.width / 4, size.height);
  25. var firstEndPoint = Offset(size.width / 2.25, size.height - 30);
  26. path.quadraticBezierTo(firstControlPoint.dx, firstControlPoint.dy,
  27. firstEndPoint.dx, firstEndPoint.dy);
  28. var secondControlPoint = Offset(size.width / 4 * 3, size.height - 80);
  29. var secondEndPoint = Offset(size.width, size.height - 40);
  30. path.quadraticBezierTo(secondControlPoint.dx, secondControlPoint.dy,
  31. secondEndPoint.dx, secondEndPoint.dy);
  32. path.lineTo(size.width, size.height - 40);
  33. path.lineTo(size.width, 0);
  34. return path;
  35. }
  36. @override
  37. bool shouldReclip(CustomClipper<Path> oldClipper) {
  38. return false;
  39. }
  40. }
  • 这两节课的主要内容就是如何裁切和贝塞尔曲线的原理,其实裁切还有圆形裁切、圆角裁切和矩形裁切,因为都比较容易,我就不再讲解了。感兴趣的小伙伴可以自学一下