【Rive】Android与Rive交互

1 Android与Rive交互的常用接口

1.1 RiveAnimationView参数

<app.rive.runtime.kotlin.RiveAnimationViewandroid:id="@+id/rive_view"android:layout_width="match_parent"android:layout_height="match_parent"android:adjustViewBounds="true"app:riveAnimation="rive_anim"app:riveArtboard="rive_artboard"app:riveResource="@raw/rive_res"<!--加载网络资源app:riveUrl="https://cdn.rive.app/animations/vehicles.riv"-->app:riveStateMachine="State Machine 1" />

1.2 Inputs交互

        Android 中可以通过 RiveAnimationView 控制动画状态机的状态切换,也可以控制混合动画的混合比例变化。

// 激活触发器
fun fireState(stateMachineName: String, inputName: String)
// 修改Boolean变量的值
fun setBooleanState(stateMachineName: String, inputName: String, value: Boolean)
// 修改Number变量的值
fun setNumberState(stateMachineName: String, inputName: String, value: Float)

1.3 文本操作

        Android 中可以通过 RiveAnimationView 访问 Rive 中的 Run Text,并且 修改 Run Text 的内容。 

// 获取文本
fun getTextRunValue(textRunName: String): String?
fun getTextRunValue(textRunName: String, path: String): String?
// 设置文本
fun setTextRunValue(textRunName: String, textValue: String)
fun setTextRunValue(textRunName: String, textValue: String, path: String)

        说明:要想在 Android 中访问到 Rive 的 Run Text,需要右键文本的 Run Text,并勾选 Export name。

2 应用

        本节将演示 Android 与 Rive 交互的应用,Rive 在 Android 中的环境配置详见 → Rive在Android上的简单应用。本节完整资源详见 → Android与Rive交互应用案例。

2.1 Inputs交互应用

        本节主要介绍 Android 传递参数给 Rive,使得动画状态机中某些状态的过渡条件满足,触发动画由 A 状态过渡到 B 状态。关于 Android 传递参数给 Rive 触发混合动画的混合比例变化的应用详见 → 【Rive】混合动画。

        1)时间线、输入变量

        ①时间线说明:Color_Red、Color_Green、Color_Blue 都只对颜色参数做动画,并且都只有一帧,对应的颜色分别是红、绿、蓝;Rotate_P、Rotate_N 都只对旋转参数做动画,并且都只有一帧,对应的旋转值分别是 0°、-90°;Scale_Idle、Scale 都只对缩放参数做动画,Scale_Idle 只有一帧,值为 0,Scale 里有 3 帧,值分别为 100%、120%、100%。

        ②输入变量说明:Number_Color 是 Number 类型参数,用于控制颜色动画的过渡条件;Boolean_Rotate 是 Boolean 类型参数,用于控制旋转动画的过渡条件;Trigger_Scale 是 Trigger 类型参数,用于控制缩放动画的过渡条件。

        2)状态机

        ①Color状态机说明:当 Number_Color 分别为 0、1、2 时,颜色会切换到红色、绿色、蓝色,过渡时长都设置为 300ms。

        ②Rotate状态机说明:当 Boolean_Rotate 分别为 true 或 false 时,会正向或逆向旋转 90°。

        ③Scale状态机说明:当 Trigger_Scale 被激活时,会触发一次缩放动画,Scale→Scale_Idle 过渡条件的 Exit Time 设置为 100%。

        3)MainActivity

package com.zhyan8.testInputsimport android.os.Bundle
import android.view.View
import android.widget.CheckBox
import android.widget.RadioButton
import androidx.appcompat.app.AppCompatActivity
import app.rive.runtime.kotlin.RiveAnimationViewclass MainActivity : AppCompatActivity() {private lateinit var riveAnimView: RiveAnimationViewprivate lateinit var checkBox: CheckBoxoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)riveAnimView = findViewById(R.id.rive_view)checkBox = findViewById(R.id.check_box)checkBox.setOnCheckedChangeListener { _, isChecked ->riveAnimView.setBooleanState("State Machine 1", "Boolean_Rotate", isChecked)}}fun onColorSelect(view: View) {if (view is RadioButton && view.isChecked) {when (view.getId()) {R.id.color_red ->riveAnimView.setNumberState("State Machine 1", "Number_Color", 0f)R.id.color_green ->riveAnimView.setNumberState("State Machine 1", "Number_Color", 1f)R.id.color_blue ->riveAnimView.setNumberState("State Machine 1", "Number_Color", 2f)}}}fun onClick(view: View) {riveAnimView.fireState("State Machine 1", "Trigger_Scale")}
}

        4)layout_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.zhyan8.testText.MainActivity"android:orientation="vertical"android:gravity="center_vertical"android:paddingLeft="16dp"android:paddingRight="16dp"><app.rive.runtime.kotlin.RiveAnimationViewandroid:id="@+id/rive_view"android:layout_gravity="center_horizontal"android:layout_width="300dp"android:layout_height="300dp"app:riveFit="COVER"app:riveResource="@raw/test_text"app:riveStateMachine="State Machine 1" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/edit_text"android:layout_width="200dp"android:layout_height="wrap_content"android:maxLength="10"android:onClick="onClick"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:text="提交"android:onClick="onClick"/></LinearLayout></LinearLayout>

        5)运行效果

2.2 文本操作应用

        本节主要介绍 Android 传递文本给 Rive,Rive 刷新文本显示。

        文本操作的官方介绍详见 → https://rive.app/community/doc/text/docn2E6y1lXo。

        1)配置 Export name

        需要与 Android 交互的文本在导出前需要配置 Export name,如下,选中 Text Run,在右键菜单中勾选 Export name。

         2)MainActivity

package com.zhyan8.testTextimport android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
import app.rive.runtime.kotlin.RiveAnimationViewclass MainActivity : AppCompatActivity() {private lateinit var riveAnimView: RiveAnimationViewprivate lateinit var editText: EditTextoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)riveAnimView = findViewById(R.id.rive_view)editText = findViewById(R.id.edit_text)}fun onClick(view: View) {val oldText = riveAnimView.getTextRunValue("Run_1")Log.i("MainActivity", "onClick, oldText=$oldText")val newText = editText.text.toString()if (!newText.isNullOrEmpty()) {riveAnimView.setTextRunValue("Run_1", newText)}}
}

        3)layout_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.zhyan8.testText.MainActivity"android:orientation="vertical"android:gravity="center_vertical"android:paddingLeft="16dp"android:paddingRight="16dp"><app.rive.runtime.kotlin.RiveAnimationViewandroid:id="@+id/rive_view"android:layout_gravity="center_horizontal"android:layout_width="300dp"android:layout_height="300dp"app:riveFit="COVER"app:riveResource="@raw/test_text"app:riveStateMachine="State Machine 1" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><EditTextandroid:id="@+id/edit_text"android:layout_width="200dp"android:layout_height="wrap_content"android:maxLength="10"android:onClick="onClick"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="20dp"android:text="提交"android:onClick="onClick"/></LinearLayout></LinearLayout>

        4)运行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/889392.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Maven、mybatis框架

一、Maven介绍 1.概念&#xff1a; Maven项目对象模型(POM)&#xff0c;可以通过一小段描述信息来管理项目的构建&#xff0c;报告和文档的项目管理工具软件。 2.为啥使用maven: 之前项目中需要引入大量的jar包。这些jar从网上下载&#xff0c;可能下载地址不同意。这些jar之间…

使用 Python 爬取某网站简历模板(bs4/lxml+协程)

使用 Python 爬取站长素材简历模板 简介 在本教程中&#xff0c;我们将学习如何使用 Python 来爬取站长素材网站上的简历模板。我们将使用requests和BeautifulSoup库来发送 HTTP 请求和解析 HTML 页面。本教程将分为两个部分&#xff1a;第一部分是使用BeautifulSoup的方法&am…

什么是厄尔米特(Hermitian)矩阵?

厄米矩阵&#xff08;Hermitian Matrix&#xff09;定义 在数学和物理中&#xff0c;厄米矩阵是满足以下条件的复方阵&#xff1a; A A † \mathbf{A}\mathbf{A}^\dagger AA† 其中&#xff0c; A † \mathbf{A}^\dagger A†表示矩阵 A \mathbf{A} A的共轭转置&#xff0c;即…

HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装

TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层&#xff0c;传输层会添加TCP或者UDP头部&#xff0c;然后交给网络层&#xff0c;网络层会添加IP头部&#xff0c;然后交给数据链路层&#xff0c;数据链路层会添加以太网头部和以太网尾部&#xff0c;最后变成01这样…

爬虫获取的数据能否用于商业分析?

根据搜索结果&#xff0c;爬虫获取的数据能否用于商业分析&#xff0c;主要取决于以下几个因素&#xff1a; 数据的合法性与合规性&#xff1a; 爬虫技术本身并不违法&#xff0c;关键在于使用的方式和目的。爬虫技术的使用必须遵守相关法律法规&#xff0c;如《反不正当竞争法…

数据湖治理最佳实践

如果没有最佳实践&#xff0c;存储可能会变得无法维护。自动化数据质量、生命周期和隐私功能可持续清理/移动数据湖中的数据。数据湖正成为企业从大数据中提取价值的一种日益可行的解决方案&#xff0c;对于早期采用者和新用户来说都是合理的下一步。在独立的逻辑区域中随时可用…

《Vue进阶教程》第六课:computed()函数详解(上)

往期内容&#xff1a; 《Vue零基础入门教程》合集&#xff08;完结&#xff09; 《Vue进阶教程》第一课&#xff1a;什么是组合式API 《Vue进阶教程》第二课&#xff1a;为什么提出组合式API 《Vue进阶教程》第三课&#xff1a;Vue响应式原理 《Vue进阶教程》第四课&#…

根据PDF模板单个PDF导出到浏览器和多个PDF打包ZIP导出到浏览器

一、单个PDF导出到浏览器 /*** * param templatePath 模板路径* param fileName 文件名称* param data 填充文本* param images 填充图片* param response* throws IOException*/public static void generateTempPDF(String templatePath, String fileName, Map<String, S…

ssd202d-badblock-坏块检测

这边文章讲述的是坏快检测功能 思路&#xff1a; 1.第一次烧录固件会实现跳坏块&#xff0c;但是后续使用会导致坏块的产生&#xff1b; 于是我在uboot环境变量添加了两个变量来控制坏快 lb_badnum //坏块个数 lb_badoff //坏块所在位置 2.第一次开机会根据lb_badnum是否…

Tornado 异步编程全解析

一、Tornado 异步基础 核心概念 IOLoop&#xff1a; 是 Tornado 的核心事件循环&#xff0c;负责处理网络 I/O、定时器等事件。它不断地循环监听事件&#xff0c;一旦有事件就绪就调用相应的回调函数。可以在一个进程中创建多个 IOLoop&#xff0c;但通常一个应用使用一个主 IO…

Windows桌面系统管理2:VMware Workstation使用和管理

Windows桌面系统管理0:总目录-CSDN博客 Windows桌面系统管理1:计算机硬件组成及组装-CSDN博客 Windows桌面系统管理2:VMware Workstation使用和管理 Windows桌面系统管理3:Windows 10操作系统部署与使用-CSDN博客 Windows桌面系统管理4:Windows 10操作系统运维管理-…

鸿蒙ArkTS如何实现数据可视化:饼状图/柱状图/折线图

鸿蒙数据可视化系列 在我们鸿蒙APP开发中&#xff0c;经常需要使用到一些图表的开发&#xff0c;本文主要介绍使用 McCharts 框架绘制柱状图的方法 配套指导视频地址&#xff1a;鸿蒙数据可视化系列-McCharts使用介绍_哔哩哔哩_bilibili 1. 第三方库介绍 1.1. McCharts Mc…

基于go语言的开源调度系统整理

pink https://github.com/busgo/pink 通过Web界面管理操作简单方便&#xff0c;支持各种任务 高可用可以部署 n 台调度集群节点&#xff0c;保证没有单点故障。 部署简单、仅仅需要一个执行文件即可运行。 集成方便&#xff0c;统一语言无关的任务抽象&#xff0c;接入不同语言…

多个终端查看的history不一样,如何确保多个终端会话之间的 history 一致,减少历史记录差异

问题&#xff1a; 在使用 Linux 系统时&#xff0c;history 命令显示的历史记录通常是与当前终端会话相关的。这就意味着&#xff0c;如果你在多个终端中打开会话&#xff0c;它们显示的历史记录可能不完全相同。这个问题通常是由以下原因引起的&#xff1a; 原因&#xff1a…

yolov8 转华为昇腾om脚本

目录 yolov8 转华为昇腾 om脚本 测试ok 推理demo: yolov8 转华为昇腾 om脚本 测试ok import sys import osos.chdir(os.path.dirname(os.path.abspath(__file__)))import torchcurrent_dir = os.path.dirname(os.path.abspath(__file__))paths = [os.path.abspath(__file__)…

unity打包sdk热更新笔记

Unity3D项目Plugins目录组织 https://blog.csdn.net/linxinfa/article/details/102978005 IPreprocessBuild 继承提供打包前&#xff0c;打包后接口 BuildAssetBundles UnityWebRequest’s DownloadHandlerAssetBundle / LoadFromFile / LoadFromMemoryAsync 数据完整性校…

12.11-12.12总结(约瑟夫问题 机器翻译 滑动窗口)

12.11 刷题 《算法竞赛》这本书看了很多了&#xff0c;但是题目没咋做&#xff0c;所以今天来刷一下题 P1996约瑟夫问题 还依稀记得大一的时候被约瑟夫支配的恐惧&#xff08;哭&#xff09;&#xff0c;但是现在做就感觉很简单&#xff08;虽然也敲了一会&#xff0c;今早感…

git SSL certificate problem: unable to get local issuer certificate

Git 客户端将会验证服务器端提供的SSL证书是否由受信任的证书颁发机构&#xff08;Certification Authority&#xff0c;CA&#xff09;签发。如果Git客户端无法找到或验证本地签发者证书&#xff0c;就会出现 unable to get local issuer certificate 或类似的错误。 该问题一…

使用秘钥登录服务器

在我们测试或生产环境中&#xff0c;为了服务器安全性&#xff0c;有时可能需要以 SSH 密钥的方式登录服务器&#xff0c;接下来&#xff0c;将演示如何通过 SSH 私钥的方式来远程服务器。 一、远程服务器生成密钥对 1、首先在目标远程服务器下生成 SSH 密钥对 ssh-keygen然…

css设置透明的几种办法

在CSS中&#xff0c;有几种方法可以设置元素的透明度。以下是主要的几种方式&#xff1a; 1. 使用 opacity 属性 定义&#xff1a;opacity 属性用于设置元素的整体透明度&#xff0c;包括其内容和背景。取值范围&#xff1a;取值从0&#xff08;完全透明&#xff09;到1&…