用java编写一个带交互的动画_Flutter(Flare) 最有趣用户交互动画没有之一

2023-12-13 13:30

本文主要是介绍用java编写一个带交互的动画_Flutter(Flare) 最有趣用户交互动画没有之一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019年12月12日,Flutter Interact ’19 上发布了怎么运用 Rive 和 Flutter 制造动态可交互的动画经验共享,我看了之后,觉得非常有趣,因而,写了3个小 demo,把它写成文章记录共享给咱们。

名词了解

首要,咱们来了解几个名词,否则后续文章,或许看着有些晕,如下:

Flare:是 Flutter 的动画插件称号,l – P S完好称号是 flare_flutter 咱们要在 pubspec.yaml 文件里引进

Rive:是制造 Flare 动画的网站,它既是一个网站也是制造工具,在此网站里有许多用户共享 Flare 动画供咱们下载运用、Flare API运用文档、制造 Flare 动画的视频教程(咱们也能够经过学习制造自己喜爱的动u ! Y g Q画) – f Y 3 K Y L)等

交互动画预览

登录交互动画

登v 4 [ 1 5 ! f d B录交互动画,包含如下6种动画:

idl. I 7 h * | = 9 xe:无任何操作时的状况(熊的身体会上下起浮和眨眼睛)

test:当咱们在 email 输入框中输入时的状况(熊会看o ( e Q P |向输入框– 3 &,且跟着你输入的长度旋转头部)

hands_up:当咱们在 password 输入框中~ – Y Y V ` J C输入时的状况 (熊会用手蒙上眼睛)

hands_down:当咱们在 password 输入框输入完成时的状况 (熊会放( c D下双手)

fail:当% f R咱? ! ! n H们登录失败时的状况(熊会做出伤心的表情)

succem N – a * { C T bss:当咱们登录r ^ [ # @成功时的状况(熊会做出快乐的表情)

以上6种状况,能够在 Rive 网站检查具体动画,点击进入检查I M I k h y J

下面,咱们来看看案例里完成动画效果

idle:无任何操作时的状况,如图:

0251b3b737d80c12723a7830c95bb496.gifidle

test:当咱们在 email 输入框中输入时的状况,如图:

9aa0eae47a8da5494d22e00257d4f69c.giftest

hands_up:当咱们在 password 输入框中输入T ~ : Z时的状况,hands_down:当咱们在 password 输入框输入完成时的状况,如图:

8b4e4842f189c316e6734f3f7e419957.gifhan_ Q jds_up & hands_down

fk 5 nail:当咱们登录失败时的状( # 0 b | Z况,如图:

b4c588901bc7557defc85b961ad86566.giffail

success:当咱们登录成功时的状况,如图:

e414e87ee0baa9561ae2718adccb7c4e.gifsucces# y R Y , ss

Button交互动画

button 交互动画,如图:

a10c4b2b404bb8338943ba4a79049061.gifbutton

Menu交互动画

menu 交互动画,如图:& 4 5 &

053ca2409431a822878a776b151318bc.gifmenu

以上一切动画,也能够 点击观看视频

代码完成

怎么用代码完成,分为以下2个过程:

引进插件和资源:引进相关插件 flare_flutter 、 smart_flare

编写代码:编写相关代码

引进插件和资源

引进插件和资源,如下:

dependencies:

...

flare_flutter: ^2.0.4 # flare 插件

smart_flare: any # 对 flare- % r P API进行封装的s ( +插件,运用少3 , % e ? ^ f i 0数的代码即可完成交互动画

...

assets:

...

- assets/Teddy.flr

- assets/button-aP ? K @nimation.flr

- assets/slideout-menu.flr

...

编写代码

由于,登录? ? 3交互动画稍复杂一些,在此就不展示完成的代码,如感兴趣,可移步GitHub检查源码

Button交互动画代码完成

button 交互动画代码完成如下:

import 'package:flutter/material.dart';

import 'package:smart_flare/act/ S O } | wors/smart_flare4 R 6 T ] ]_actor.dart'm e | g x s a;

import 'package:smart_flG J ` P gare/modu } 6 r 9 d [els.dart';

class FlareButtonDemo extends StatefulWidget{

@override

_FlareButtonDemoState createState() => _FlareButtonDemoState();

}

class _Fi ^ f $ W % N h :lareButtonDemoState extends State{

@override

Widge& p ~ 1t build(^ % A b ; v _ sBuildContextL C 8 context) {

var animationWidth = 295.0;

var animationHeight = 251.0;

var animationWidthThirds = animationWidth / 3;

var halfAnimationHeight = animationHeighF x a X + y 3 Ct / 2;

var actD Q C % ` u ] ;iveAreas = [

ActiveArea(

area: Rect.from[ ] I iLTWH(0, 0, animationWidthThirds, halfAnimationHeb V 5 O 5 S u Tight),

debugp Q i 0 d { _ FArea: false,

guardComingFrom: ['deactivate'],

animationName: 'camera_tapped',

),

A^ 8 z r 3 m {ctiveArea(

area: Rect.fromLTWH(animationWidthThirds, 0, animaB ` 8 .tionWi$ F _ 2 p & R $ pdthThirds, halfAnimationHeight),

debugArea: false,

guardComingFromP | 9 R w 0 ~ G $: ['deactivate'],

animationName: 'put Y t ; @ Plse_tapped'),

ActiveArq n b 8 eea(

area: Rect.fromLTWH(animationWidthThirds * 2, 0, animaX B x N 7 g BtionWidthThirds, halfAnimationHeight),

debugArea: false,

guardCominE ^ : P 4 AgFrom: ['deactivate'],

animationName: 'image_tapped'),5 # . { + Q h & I

ActiveArea(

area: Rect.fromLTWH(0, animationHeight / 2, animationWidth, an( C , WimationHeight / 2),

debugq ~ 0 c M 7Area: false,

animationsToCycle: ['activate', 'deactivatee # f I ?'],

onAreaTapped: () {

print('Button tapped!');

})

];

return Scaffold(

appBar: AppBar(

title: Text('Flare Button Demo'),

),

body: Container(

decoration: BoxDecoI i n ) Bration(

gradient: LinearGra} + k B ]dient(

begin: Alignment.tu # J 0opC- f 0 @ e O v nenter,

end: AlignmentI } m S.bottomCenter,

colord ` W M 2 + W U %s: [

Color(0x3fffeb3b),

Colorn h ? N f 4 ~ 6s.orange,

]),

),

child: Align(

aligt Y U ; lnment: Alignment.bottc # 5 I } n K -omCentez ] + K w 5 )r,

child: SmartFlareActor(

width: animationWidth,

height: animationHeight,

filename: 'assets/button-ani3 w d 6 p 7 S /mation.flr',

startingA6 K { R Ynimation: 'deactivate',

activeAreas: activeAreas,

),

),

),

);

}

}

Menu交互动画代码完成

menu 交互动画代码完成,如下:

impor5 p 1t 'package:flutter/ma[ : @terial.dart';

import 'pack4 Q @ & 3age:smart_flare/[ 4 M 8smart_flare.dart';

class FlareSidebarMenB / S 0 8 . , 6uDemo extends StatelessWidget{

@overri] W g m G Tde

Widget build(BuildConte& X 5 4 M ? ] b sxt context) {

print| B t L 0 K L(MediaQuery.` p 4of(context).size.height);

return ScO 6 ; u @ Y u - 0afu { [ l f k 4 G [fold(

body: Container(

child: Align(

alignment: Alignmen_ j z & q I % 2t.centerRightg h ; ) |,

child: PanFlareActor(

width: MediaQuer} 8 5y.of(context).size.width / 2.366,

height: MediaQuery.of(context).size.height,

filename: 'assets/slideout-menu.flr',

openAnimation: 'open',

closY m @ I A O HeAnimation: 'close',

direction: ActorAdvancingDirection.RightToLeft,

threshold: 20.0,

reverseOnRelease: true,

completeOnThresholdReached: true,

activeAreas: [

RelativePanArea(

area: Rect2 - 3 f l C h [.fromLTWH(0, .7, 1.0, .3), debugArea: false),

],

),

),

),

);

}

}

以上3个交互动画案例的源码,放在了我2年前写的一个 Flutter案例 的项目里了,b + b o O [ Q此项目现已维护起来,今后; x P S } 5 W 4会长时间更新,感兴s H R u *趣的小伙伴能够保藏,没事时来看看或许会有新的发现

此篇文章到此结束,下篇文章方案给咱们共享,Flu– E x ^ , Fttx 6 c s ( ( x , ~er 里的路由,会总g ] $结归纳一切的路由运L Y l r y用方法,最后来封装一个优秀的路由管理类。

最后附上博客和项目地址,如下:

博客地址:h.lishaoy.net/flutter-fla…

项目地址:github.com/persi: P y X T n @ 5 tlee/fl…

这篇关于用java编写一个带交互的动画_Flutter(Flare) 最有趣用户交互动画没有之一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/488633

相关文章

springboot健康检查监控全过程

《springboot健康检查监控全过程》文章介绍了SpringBoot如何使用Actuator和Micrometer进行健康检查和监控,通过配置和自定义健康指示器,开发者可以实时监控应用组件的状态,... 目录1. 引言重要性2. 配置Spring Boot ActuatorSpring Boot Act

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python