用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

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

豆包 MarsCode 不允许你还没有女朋友

在这个喧嚣的世界里,爱意需要被温柔地唤醒。为心爱的她制作每日一句小工具,就像是一场永不落幕的浪漫仪式,每天都在她的心田播撒爱的种子,让她的每一天都充满甜蜜与期待。 背景 在这个瞬息万变的时代,我们都在寻找那些能让我们慢下来,感受生活美好的瞬间。为了让这份浪漫持久而深刻,我们决定为女朋友定制一个每日一句小工具。这个工具会在她意想不到的时刻,为她呈现一句充满爱意的话语,让她的每一天都充满惊喜和感动

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory