我想为头像图片(如instagram故事)this等实现圆形动画。
我该如何实现?
答案 0 :(得分:2)
您可以尝试使用dashed_circle包来创建instagram故事(例如圆圈)(请参见下图)。要创建简单的旋转版本,您可以使用Transform.rotate构造函数添加两次旋转。
第一个旋转必须是虚线圆圈的父窗口小部件。第二次旋转应以与第一次旋转相反的角度围绕虚线圆的子小部件。
要创建虚线减慢合并为单行的效果,可以缓慢减小dashed_circle
的间隙属性。
我试了一下,并在一个快速演示中尝试了一下,向您展示了示例实现:
import 'package:flutter/material.dart';
import 'package:dashed_circle/dashed_circle.dart';
void main() => runApp(new MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'Flutter Demo',
theme: new ThemeData(),
home: Scaffold(
body: Center(
child: RotateAnimationDemo(),
),
),
);
}
}
class RotateAnimationDemo extends StatefulWidget {
@override
State<StatefulWidget> createState() => RotateAnimationDemoState();
}
class RotateAnimationDemoState extends State<RotateAnimationDemo>
with SingleTickerProviderStateMixin {
AnimationController controller;
Animation base;
Animation inverted;
Animation gap;
@override
void initState() {
super.initState();
controller =
AnimationController(vsync: this, duration: Duration(seconds: 3));
base = CurvedAnimation(parent: controller, curve: Curves.easeOut);
inverted = Tween<double>(begin: 0.0, end: -1.0).animate(base);
gap = Tween<double>(begin: 3.0, end: 0.0).animate(base)
..addListener(() {
setState(() {});
});
}
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () => controller.forward(),
child: RotationTransition(
turns: base,
child: DashedCircle(
gapSize: gap.value,
dashes: 20,
color: Colors.deepOrange,
child: RotationTransition(
turns: inverted,
child: Padding(
padding: const EdgeInsets.all(7.0),
child: CircleAvatar(
radius: 60.0,
backgroundImage: NetworkImage(
'https://upload.wikimedia.org/wikipedia/commons/thumb/7/71/Bill_Gates_Buys_Skype_%285707954468%29.jpg/2560px-Bill_Gates_Buys_Skype_%285707954468%29.jpg'),
),
),
),
),
),
);
}
}