trans_test.dart 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import 'dart:math';
  2. import 'package:flutter/material.dart';
  3. import 'package:matrix4_transform/matrix4_transform.dart';
  4. void main() {
  5. runApp(MaterialApp(
  6. home: Scaffold(
  7. body: Center(
  8. child: SizedBox(width: 300, height: 300,
  9. child: Container(
  10. color: Colors.blue,
  11. child: const TestWidget()
  12. )
  13. ) ,
  14. ),
  15. )
  16. ));
  17. }
  18. Matrix4 _rotate(double angle, Offset focalPoint) {
  19. var c = cos(angle);
  20. var s = sin(angle);
  21. var dx = (1 - c) * focalPoint.dx + s * focalPoint.dy;
  22. var dy = (1 - c) * focalPoint.dy - s * focalPoint.dx;
  23. // ..[0] = c # x scale
  24. // ..[1] = s # y skew
  25. // ..[4] = -s # x skew
  26. // ..[5] = c # y scale
  27. // ..[10] = 1 # diagonal "one"
  28. // ..[12] = dx # x translation
  29. // ..[13] = dy # y translation
  30. // ..[15] = 1 # diagonal "one"
  31. return Matrix4(c, s, 0, 0, -s, c, 0, 0, 0, 0, 1, 0, dx, dy, 0, 1);
  32. }
  33. class TestWidget extends StatelessWidget{
  34. const TestWidget({super.key});
  35. @override
  36. Widget build(BuildContext context) {
  37. var tran = Matrix4.identity();
  38. final size =MediaQuery.of(context).size;
  39. // tran.setTranslation(Matrix4.translationValues(100, 120, 0).getTranslation());
  40. tran = Matrix4Transform()
  41. .rotateDegrees(45, origin: Offset(150, 150)).matrix4 * tran;
  42. // tran = Matrix4Transform()
  43. // .rotateDegrees(45, origin: Offset(150, 150)).matrix4 * tran;
  44. //
  45. return Transform(
  46. transform: tran,
  47. child: const Text('测试', style: TextStyle(fontSize: 50),),
  48. );
  49. }
  50. }