Flutter 如何在颤振中制作圆弧(曲线)旋转木马(ListVie,Row小部件)?
我想有一个旋转木马/滑水器/行元素(图像/图标)跟随曲线路径(圆弧),我想滚动曲线路径中的元素而不是直线路径中的元素,如果你有任何想法,请分享。 您可以查看下面链接中的示例:Flutter 如何在颤振中制作圆弧(曲线)旋转木马(ListVie,Row小部件)?,flutter,carousel,curve,swiper,flutter-animation,Flutter,Carousel,Curve,Swiper,Flutter Animation,我想有一个旋转木马/滑水器/行元素(图像/图标)跟随曲线路径(圆弧),我想滚动曲线路径中的元素而不是直线路径中的元素,如果你有任何想法,请分享。 您可以查看下面链接中的示例: 是的,你可以检查一下,我使用了PageView: 例: class\u MyHomePageState扩展状态{ 页面控制器(PageController)= PageController(初始页:0,视口分数:0.2); int pageChangedIndex=0; @凌驾 小部件构建(构建上下文){ //TODO
是的,你可以检查一下,我使用了PageView: 例:
class\u MyHomePageState扩展状态{
页面控制器(PageController)=
PageController(初始页:0,视口分数:0.2);
int pageChangedIndex=0;
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“主页”),
),
主体:对齐(
对齐:对齐.bottomCenter,
子:堆栈(
对齐:对齐.bottomCenter,
儿童:[
容器(
高度:100.0,
颜色:颜色,蓝色,
),
PageView.builder(
物品计数:20,
控制器:_pageController,
物理:弹跳CrollPhysics(),
onPageChanged:(索引){
设置状态(){
pageChangedIndex=索引;
});
},
itemBuilder:(上下文,索引){
打印(pageChangedIndex.toString()+“”+index.toString());
最终刻度=最大值(刻度分数,
(满刻度-(索引-pageChangedIndex).abs())+0.2);
返回堆栈(
儿童:[
动画定位(
持续时间:持续时间(毫秒:600),
底部:索引-2==pageChangedIndex
? 10.0
:索引-1==pageChangedIndex
? 30
:索引+1==pageChangedIndex
? 30.0
:索引+2==pageChangedIndex
? 10.0
:索引==pageChangedIndex
? 50.0
: 10.0,
子:容器(
颜色:颜色,红色,
//高度:pageChangedIndex==索引
//?寻呼机高度*刻度
// : 45.0,
//宽度:pageChangedIndex==索引
//?寻呼机高度*刻度
// : 45.0,
孩子:文本(‘嘿,那里’),
),
),
],
);
}),
],
),
),
);
}
}
是的,您可以检查,我使用了PageView:
例:
class\u MyHomePageState扩展状态{
页面控制器(PageController)=
PageController(初始页:0,视口分数:0.2);
int pageChangedIndex=0;
@凌驾
小部件构建(构建上下文){
//TODO:实现构建
返回脚手架(
appBar:appBar(
标题:文本(“主页”),
),
主体:对齐(
对齐:对齐.bottomCenter,
子:堆栈(
对齐:对齐.bottomCenter,
儿童:[
容器(
高度:100.0,
颜色:颜色,蓝色,
),
PageView.builder(
物品计数:20,
控制器:_pageController,
物理:弹跳CrollPhysics(),
onPageChanged:(索引){
设置状态(){
pageChangedIndex=索引;
});
},
itemBuilder:(上下文,索引){
打印(pageChangedIndex.toString()+“”+index.toString());
最终刻度=最大值(刻度分数,
(满刻度-(索引-pageChangedIndex).abs())+0.2);
返回堆栈(
儿童:[
动画定位(
持续时间:持续时间(毫秒:600),
底部:索引-2==pageChangedIndex
? 10.0
:索引-1==pageChangedIndex
? 30
:索引+1==pageChangedIndex
? 30.0
:索引+2==pageChangedIndex
? 10.0
:索引==pageChangedIndex
? 50.0
: 10.0,
子:容器(
颜色:颜色,红色,
//高度:pageChangedIndex==索引
//?寻呼机高度*刻度
// : 45.0,
//宽度:pageChangedIndex==索引
//?寻呼机高度*刻度
// : 45.0,
孩子:文本(‘嘿,那里’),
),
),
],
);
}),
],
),
),
);
}
}
非常感谢您的时间,我也做了类似的事情,但刷卡并不平滑,就像是单步走,您知道谁可以让它平滑滚动而不是有点跳跃吗?谢谢,还没有,但我会尝试平滑刷卡,然后返回给您,谢谢。您检查了该插件吗?非常感谢您的时间,我也做了类似的事情,但刷卡并不顺畅,就像踩踏板一样,您知道谁能让它滚动斯穆特吗
class _MyHomePageState extends State<MyHomePage> {
PageController _pageController =
PageController(initialPage: 0, viewportFraction: 0.2);
int pageChangedIndex = 0;
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Align(
alignment: Alignment.bottomCenter,
child: Stack(
alignment: Alignment.bottomCenter,
children: <Widget>[
Container(
height: 100.0,
color: Colors.blue,
),
PageView.builder(
itemCount: 20,
controller: _pageController,
physics: BouncingScrollPhysics(),
onPageChanged: (index) {
setState(() {
pageChangedIndex = index;
});
},
itemBuilder: (context, index) {
print(pageChangedIndex.toString() + ' ' + index.toString());
final scale = max(SCALE_FRACTION,
(FULL_SCALE - (index - pageChangedIndex).abs()) + 0.2);
return Stack(
children: <Widget>[
AnimatedPositioned(
duration: Duration(milliseconds: 600),
bottom: index - 2 == pageChangedIndex
? 10.0
: index - 1 == pageChangedIndex
? 30
: index + 1 == pageChangedIndex
? 30.0
: index + 2 == pageChangedIndex
? 10.0
: index == pageChangedIndex
? 50.0
: 10.0,
child: Container(
color: Colors.red,
// height: pageChangedIndex == index
// ? PAGER_HEIGHT * scale
// : 45.0,
// width: pageChangedIndex == index
// ? PAGER_HEIGHT * scale
// : 45.0,
child: Text('hey there'),
),
),
],
);
}),
],
),
),
);
}
}