欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

flutter PositionedTransition實現(xiàn)縮放動畫

 更新時間:2019年07月17日 10:02:17   作者:早起的年輕人  
這篇文章主要為大家詳細介紹了flutter PositionedTransition實現(xiàn)縮放動畫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了flutter實現(xiàn)縮放動畫的具體代碼,供大家參考,具體內(nèi)容如下

flutter 動畫狀態(tài)監(jiān)聽器

AnimationController

//動畫控制器
AnimationController controller;
//AnimationController是一個特殊的Animation對象,在屏幕刷新的每一幀,就會生成一個新的值,
// 默認(rèn)情況下,AnimationController在給定的時間段內(nèi)會線性的生成從0.0到1.0的數(shù)字
//用來控制動畫的開始與結(jié)束以及設(shè)置動畫的監(jiān)聽
//vsync參數(shù),存在vsync時會防止屏幕外動畫(動畫的UI不在當(dāng)前屏幕時)消耗不必要的資源
//duration 動畫的時長,這里設(shè)置的 seconds: 2 為2秒,當(dāng)然也可以設(shè)置毫秒 milliseconds:2000.
 controller =
 AnimationController(duration: const Duration(seconds: 2), vsync: this);
 //動畫開始、結(jié)束、向前移動或向后移動時會調(diào)用StatusListener
 controller.addStatusListener((status) {
 if (status == AnimationStatus.completed) {
 //動畫從 controller.reverse() 反向執(zhí)行 結(jié)束時會回調(diào)此方法
 print("status is completed");
 // controller.reset(); 將動畫重置到開始前的狀態(tài)
 //開始執(zhí)行
 //controller.forward();
 } else if (status == AnimationStatus.dismissed) {
 //動畫從 controller.forward() 正向執(zhí)行 結(jié)束時會回調(diào)此方法
 print("status is dismissed");
 //controller.forward();
 }else if (status == AnimationStatus.forward) {
 print("status is forward");
 //執(zhí)行 controller.forward() 會回調(diào)此狀態(tài)
 }else if (status == AnimationStatus.reverse) {
 //執(zhí)行 controller.reverse() 會回調(diào)此狀態(tài)
 print("status is reverse");
 }
 });

AnimationController 的常用操作說明

flutter AnimationStatus 動畫狀態(tài)說明

flutter PositionedTransition 實現(xiàn)中心縮放動畫

動畫開始與結(jié)束分析

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_x/base/base_appbar_page.dart';

/**
 * RelativeRectTween 縮放動畫
 */
class RelativeRectTweenPage extends StatefulWidget {
 @override
 State<StatefulWidget> createState() {
 return new RelativeRectTweenState();
 }
}

class RelativeRectTweenState extends BaseAppBarPageState<RelativeRectTweenPage>
 with SingleTickerProviderStateMixin {
 //動畫控制器
 AnimationController controller;
 Animation<RelativeRect> animation;

 @override
 String buildInitState() {
 buildBackBar("動畫", backIcon: Icons.arrow_back_ios);
 controller =
 AnimationController(duration: const Duration(seconds: 2), vsync: this);
 //動畫開始、結(jié)束、向前移動或向后移動時會調(diào)用StatusListener
 controller.addStatusListener((status) {
 if (status == AnimationStatus.completed) {
 //動畫從 controller.forward() 正向執(zhí)行 結(jié)束時會回調(diào)此方法
 print("status is completed");
 //反向執(zhí)行
 //controller.reverse();
 } else if (status == AnimationStatus.dismissed) {
 //動畫從 controller.reverse() 反向執(zhí)行 結(jié)束時會回調(diào)此方法
 print("status is dismissed");
 //controller.forward();
 } else if (status == AnimationStatus.forward) {
 print("status is forward");
 //執(zhí)行 controller.forward() 會回調(diào)此狀態(tài)
 } else if (status == AnimationStatus.reverse) {
 //執(zhí)行 controller.reverse() 會回調(diào)此狀態(tài)
 print("status is reverse");
 }
 });

 // 這個動畫的過程是
 // 子widget 距左邊距離從 10.0 變化 到100.0
 // 子widget 距上邊距離從 10.0 變化 到100.0
 // 子widget 距右邊距離從 10.0 變化 到100.0
 // 子widget 距下邊距離從 10.0 變化 到100.0
 // 四邊同時變化 相同的距離 倍率,所以看出來是 中心縮小的動畫
 RelativeRectTween rectTween = RelativeRectTween(
 //初始位置設(shè)置
 begin: const RelativeRect.fromLTRB(
  //子widget 距父布局 left 10.0
  10.0,
  //子widget 距父布局 top 10.0
  10.0,
  //子widget 距父布局 right 10.0
  10.0,
  //子widget 距父布局 bottom 10.0
  10.0),
 //結(jié)束位置設(shè)置
 end: RelativeRect.fromLTRB(
  //子widget 距父布局 left 100.0
 100.0,
  //子widget 距父布局 top 100.0
 100.0,
 //子widget 距父布局 right 100.0
 100.0,
 //子widget 距父布局 bottom 100.0
 100.0,
 ),
 );

 //關(guān)聯(lián) controller
 animation = rectTween.animate(controller);

 return null;
 }

 @override
 Widget buildWidget(BuildContext context) {
 return buildSlideTransition();
 }

 @override
 void dispose() {
 super.dispose();
 controller.dispose();
 }

 //漸變動畫
 Widget buildSlideTransition() {
 return Stack(
 children: <Widget>[
 //必須作為Stack的子widget
 PositionedTransition(
  rect: animation,
  child: Container(
  color: Colors.grey,
  child: Image.network(
  "http://img5.duitang.com/uploads/item/201411/16/20141116124947_xBNxM.jpeg",
  ),
  ),
 ),
 Positioned(
  bottom: 20,
  left: 20,
  child: FlatButton(
  onPressed: () {
  if (controller.isDismissed) {
   ///正向動畫開始
   controller.forward();
  } else if (controller.isCompleted) {
   ///反向動畫開始
   controller.reverse();
  } else {
   //停止
   controller.dispose();
   //重置動畫
   controller.reset();
  }
  },
  child: Text("開始")),
 )
 ],
 );
 }
}

flutter PositionedTransition 向上縮放

 RelativeRectTween rectTween = RelativeRectTween(
 //初始位置設(shè)置
 begin: const RelativeRect.fromLTRB(
  50.0,
  50.0,
  50.0,
  50.0),
 //結(jié)束位置設(shè)置
 end: RelativeRect.fromLTRB(
 50.0,
 50.0,
 50.0,
 500.0,
 ),
 );

flutter PositionedTransition 向右縮放

RelativeRectTween rectTween = RelativeRectTween(
 //初始位置設(shè)置
 begin: const RelativeRect.fromLTRB(
  50.0,
  50.0,
  50.0,
  50.0),
 //結(jié)束位置設(shè)置
 end: RelativeRect.fromLTRB(
 500.0,
 50.0,
 50.0,
 50.0,
 ),
 );

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Notification消息通知 自定義消息通知內(nèi)容布局

    Notification消息通知 自定義消息通知內(nèi)容布局

    這篇文章主要為大家詳細介紹了Notification消息通知,消息合并且顯示條數(shù),自定義消息通知內(nèi)容布局,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • android自定義WaveView水波紋控件

    android自定義WaveView水波紋控件

    這篇文章主要為大家詳細介紹了android自定義WaveView水波紋控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android自定義view 你所需要知道的基本函數(shù)總結(jié)

    Android自定義view 你所需要知道的基本函數(shù)總結(jié)

    這篇文章主要介紹了Android自定義view 你所需要知道的基本函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Android開發(fā)之ClipboardManager剪貼板功能示例

    Android開發(fā)之ClipboardManager剪貼板功能示例

    這篇文章主要介紹了Android開發(fā)之ClipboardManager剪貼板功能,結(jié)合簡單實例形式分析了Android使用ClipboardManager實現(xiàn)剪貼板功能的相關(guān)操作技巧,需要的朋友可以參考下
    2017-03-03
  • Android實現(xiàn)應(yīng)用內(nèi)置語言切換功能

    Android實現(xiàn)應(yīng)用內(nèi)置語言切換功能

    這篇文章主要為大家詳細介紹了Android實現(xiàn)應(yīng)用內(nèi)置語言切換功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • 解決Android Studio 出現(xiàn)“Cannot resolve symbol” 的問題

    解決Android Studio 出現(xiàn)“Cannot resolve symbo

    今天在調(diào)試的時候,Android Studio報了一個莫名其妙的錯誤Cannot resolve symbol'R'讓人不知所措,因為這東西根本不歸我管啊,怎么會出現(xiàn) Cannot resolve symbol 這種錯誤呢?下面給大家分享Android Studio 出現(xiàn)“Cannot resolve symbol”解決方案,需要的朋友可以參考下
    2023-03-03
  • Android 中build.prop 文件與 getprop 命令

    Android 中build.prop 文件與 getprop 命令

    這篇文章主要介紹了Android 中build.prop 文件與 getprop 命令的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Android通過bin二進制程序調(diào)用jar原理

    Android通過bin二進制程序調(diào)用jar原理

    最近在研究monkey測試,發(fā)現(xiàn)monkey測試的代碼都是JAVA編寫的,通過編譯生成jar包,而我們在執(zhí)行測試時直接執(zhí)行/system/bin/monkey這個二進制程序的,那么它是如何能調(diào)起java程序的呢,本文小編給大家介紹了Android通過bin二進制程序調(diào)用jar原理,需要的朋友可以參考下
    2023-10-10
  • Android實現(xiàn)保持屏幕常亮功能

    Android實現(xiàn)保持屏幕常亮功能

    本篇文章主要介紹了Android實現(xiàn)保持屏幕常亮功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • Android?狀態(tài)管理之Lifecycle淺析

    Android?狀態(tài)管理之Lifecycle淺析

    這篇文章主要介紹了Android?狀態(tài)管理之Lifecycle淺析,Lifecycle主要用于Activity、Fragment這一類具有狀態(tài)的組件的狀態(tài)監(jiān)聽,更多相關(guān)資料介紹需要的小伙伴可以參考下面文章內(nèi)容
    2022-06-06

最新評論