Skip to content

Commit 90a2a19

Browse files
committed
add rotate scaleX scaleY
1 parent 8dd3671 commit 90a2a19

File tree

1 file changed

+57
-31
lines changed

1 file changed

+57
-31
lines changed

lib/animated_config.dart

Lines changed: 57 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ class AnimatedConfig {
1111
this.skewY,
1212
this.rotateX,
1313
this.rotateY,
14+
this.scaleX,
15+
this.scaleY,
16+
this.rotate,
1417
});
1518
final double opacity;
1619
final double scale;
@@ -20,11 +23,12 @@ class AnimatedConfig {
2023
final double skewY;
2124
final double rotateX;
2225
final double rotateY;
23-
24-
26+
final double scaleX;
27+
final double scaleY;
28+
final double rotate;
2529
}
2630

27-
enum AnimatedType { opacity, scale, translateX, translateY, skewX, skewY, rotateX, rotateY }
31+
enum AnimatedType { opacity, scale, translateX, translateY, skewX, skewY, rotateX, rotateY, scaleX, scaleY, rotate }
2832

2933
const Duration _kDefaultDuration = const Duration(seconds: 1);
3034

@@ -70,13 +74,13 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
7074
}
7175
_controller.addStatusListener((status) {
7276
if (status == AnimationStatus.completed) {
73-
if(widget.onTransitionEnd!=null)widget.onTransitionEnd();
77+
if (widget.onTransitionEnd != null) widget.onTransitionEnd();
7478
_animating = false;
7579
}
7680
});
7781
}
7882

79-
reset(){
83+
reset() {
8084
_controller?.reset();
8185
}
8286

@@ -106,7 +110,8 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
106110

107111
Widget buildWidget(Widget _child) {
108112
InterpolationTween opacityTween;
109-
InterpolationTween scaleTween;
113+
InterpolationTween scaleXTween;
114+
InterpolationTween scaleYTween;
110115
InterpolationTween translateXTween;
111116
InterpolationTween translateYTween;
112117
InterpolationTween skewXTween;
@@ -117,17 +122,19 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
117122
if (widget.from != null && widget.to != null) {
118123
AnimatedConfig fc = widget.from;
119124
AnimatedConfig tc = widget.to;
120-
scaleTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.scale??1, tc.scale??1], curve: widget.curve);
121-
translateXTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.translateX??0, tc.translateX??0], curve: widget.curve);
122-
translateYTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.translateY??0, tc.translateY??0], curve: widget.curve);
123-
skewXTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.skewX??0, tc.skewX??0], curve: widget.curve);
124-
skewYTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.skewY??0, tc.skewY??0], curve: widget.curve);
125-
rotateXTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.rotateX??0, tc.rotateX??0], curve: widget.curve);
126-
rotateYTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.rotateY??0, tc.rotateY??0], curve: widget.curve);
127-
opacityTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.opacity??1, tc.opacity??1], curve: widget.curve);
125+
scaleXTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.scaleX ?? fc.scale ?? 1, tc.scaleX ?? tc.scale ?? 1], curve: widget.curve);
126+
scaleYTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.scaleY ?? fc.scale ?? 1, tc.scaleY ?? tc.scale ?? 1], curve: widget.curve);
127+
translateXTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.translateX ?? 0, tc.translateX ?? 0], curve: widget.curve);
128+
translateYTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.translateY ?? 0, tc.translateY ?? 0], curve: widget.curve);
129+
skewXTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.skewX ?? 0, tc.skewX ?? 0], curve: widget.curve);
130+
skewYTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.skewY ?? 0, tc.skewY ?? 0], curve: widget.curve);
131+
rotateXTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.rotateX ?? fc.rotate ?? 0, tc.rotateX ?? tc.rotate ?? 0], curve: widget.curve);
132+
rotateYTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.rotateY ?? fc.rotate ?? 0, tc.rotateY ?? tc.rotate ?? 0], curve: widget.curve);
133+
opacityTween = InterpolationTween(inputRange: inputRange, outputRange: [fc.opacity ?? 1, tc.opacity ?? 1], curve: widget.curve);
128134
}
129135
if (widget.configMap != null) {
130-
List<double> scaleOutRange = [], scaleInputRange = [];
136+
List<double> scaleXOutRange = [], scaleXInputRange = [];
137+
List<double> scaleYOutRange = [], scaleYInputRange = [];
131138
List<double> translateXOutRange = [], translateXInputRange = [];
132139
List<double> translateYOutRange = [], translateYInputRange = [];
133140
List<double> skewXOutRange = [], skewXInputRange = [];
@@ -141,10 +148,15 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
141148
for (int i = 0; i < keysList.length; i++) {
142149
double key = keysList.elementAt(i);
143150
AnimatedConfig config = configs[key];
144-
if (config.scale != null) {
145-
scaleInputRange.add(key);
146-
scaleOutRange.add(config.scale);
151+
if (config.scaleX != null || config.scale != null) {
152+
scaleXInputRange.add(key);
153+
scaleXOutRange.add(config.scaleX ?? config.scale);
147154
}
155+
if (config.scaleY != null || config.scale != null) {
156+
scaleYInputRange.add(key);
157+
scaleYOutRange.add(config.scaleY ?? config.scale);
158+
}
159+
148160
if (config.translateX != null) {
149161
translateXInputRange.add(key);
150162
translateXOutRange.add(config.translateX);
@@ -161,13 +173,13 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
161173
skewYInputRange.add(key);
162174
skewYOutRange.add(config.skewY);
163175
}
164-
if (config.rotateX != null) {
176+
if (config.rotateX != null || config.rotate != null) {
165177
rotateXInputRange.add(key);
166-
rotateXOutRange.add(config.rotateX);
178+
rotateXOutRange.add(config.rotateX ?? config.rotate);
167179
}
168-
if (config.rotateY != null) {
180+
if (config.rotateY != null || config.rotate != null) {
169181
rotateYInputRange.add(key);
170-
rotateYOutRange.add(config.rotateY);
182+
rotateYOutRange.add(config.rotateY ?? config.rotate);
171183
}
172184
if (config.opacity != null) {
173185
opacityInputRange.add(key);
@@ -186,22 +198,36 @@ class SmartAnimatedWidgetState extends State<SmartAnimatedWidget> with SingleTic
186198
AnimatedType.skewY: 0,
187199
AnimatedType.rotateX: 0,
188200
AnimatedType.rotateY: 0,
201+
AnimatedType.scaleY: 1,
202+
AnimatedType.scaleX: 1
189203
};
204+
190205
///获取默认的输出
191206
List<double> _defaultOR(List<double> or, AnimatedType type) => or.length > 0 ? or : [_defaultORMap[type], _defaultORMap[type]];
192-
193-
scaleTween = InterpolationTween(inputRange: _defaultIR(scaleInputRange), outputRange: _defaultOR(scaleOutRange, AnimatedType.scale), curve: widget.curve);
194-
translateXTween = InterpolationTween(inputRange: _defaultIR(translateXInputRange), outputRange: _defaultOR(translateXOutRange, AnimatedType.translateX), curve: widget.curve);
195-
translateYTween = InterpolationTween(inputRange: _defaultIR(translateYInputRange), outputRange: _defaultOR(translateYOutRange, AnimatedType.translateY), curve: widget.curve);
207+
scaleXTween =
208+
InterpolationTween(inputRange: _defaultIR(scaleXInputRange), outputRange: _defaultOR(scaleXOutRange, AnimatedType.scaleX), curve: widget.curve);
209+
scaleYTween =
210+
InterpolationTween(inputRange: _defaultIR(scaleYInputRange), outputRange: _defaultOR(scaleYOutRange, AnimatedType.scaleY), curve: widget.curve);
211+
translateXTween = InterpolationTween(
212+
inputRange: _defaultIR(translateXInputRange), outputRange: _defaultOR(translateXOutRange, AnimatedType.translateX), curve: widget.curve);
213+
translateYTween = InterpolationTween(
214+
inputRange: _defaultIR(translateYInputRange), outputRange: _defaultOR(translateYOutRange, AnimatedType.translateY), curve: widget.curve);
196215
skewXTween = InterpolationTween(inputRange: _defaultIR(skewXInputRange), outputRange: _defaultOR(skewXOutRange, AnimatedType.skewX), curve: widget.curve);
197216
skewYTween = InterpolationTween(inputRange: _defaultIR(skewYInputRange), outputRange: _defaultOR(skewYOutRange, AnimatedType.skewY), curve: widget.curve);
198-
rotateXTween = InterpolationTween(inputRange: _defaultIR(rotateXInputRange), outputRange: _defaultOR(rotateXOutRange, AnimatedType.rotateX), curve: widget.curve);
199-
rotateYTween = InterpolationTween(inputRange: _defaultIR(rotateYInputRange), outputRange: _defaultOR(rotateYOutRange, AnimatedType.rotateY), curve: widget.curve);
200-
opacityTween = InterpolationTween(inputRange: _defaultIR(opacityInputRange), outputRange: _defaultOR(opacityOutRange, AnimatedType.opacity), curve: widget.curve);
217+
rotateXTween =
218+
InterpolationTween(inputRange: _defaultIR(rotateXInputRange), outputRange: _defaultOR(rotateXOutRange, AnimatedType.rotateX), curve: widget.curve);
219+
rotateYTween =
220+
InterpolationTween(inputRange: _defaultIR(rotateYInputRange), outputRange: _defaultOR(rotateYOutRange, AnimatedType.rotateY), curve: widget.curve);
221+
opacityTween =
222+
InterpolationTween(inputRange: _defaultIR(opacityInputRange), outputRange: _defaultOR(opacityOutRange, AnimatedType.opacity), curve: widget.curve);
201223
}
202224

203-
return Transform.scale(
204-
scale: scaleTween.evaluate(_animation),
225+
return Transform(
226+
transform: Matrix4.diagonal3Values(
227+
scaleXTween.evaluate(_animation),
228+
scaleYTween.evaluate(_animation),
229+
1.0,
230+
),
205231
child: Transform.translate(
206232
offset: Offset(
207233
translateXTween.evaluate(_animation),

0 commit comments

Comments
 (0)