1 Android与Rive交互的常用接口

1.1 RiveAnimationView参数

<app.rive.runtime.kotlin.RiveAnimationView
android: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.testInputs

import 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.RiveAnimationView class MainActivity : AppCompatActivity() {
private lateinit var riveAnimView: RiveAnimationView
private lateinit var checkBox: CheckBox override 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"?>
<LinearLayout
xmlns: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.RiveAnimationView
android: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" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edit_text"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:maxLength="10"
android:onClick="onClick"/>
<Button
android: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.testText

import 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.RiveAnimationView class MainActivity : AppCompatActivity() {
private lateinit var riveAnimView: RiveAnimationView
private lateinit var editText: EditText override 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"?>
<LinearLayout
xmlns: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.RiveAnimationView
android: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" /> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/edit_text"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:maxLength="10"
android:onClick="onClick"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="提交"
android:onClick="onClick"/>
</LinearLayout> </LinearLayout>

4)运行效果

​ 声明:本文转自【Rive】Android与Rive交互

【Rive】Android与Rive交互的更多相关文章

  1. Android与H5交互(java与js的交互)

    一.理论概述 1.js调用java方法 直接调用WebView的该方法就可以添加接口了,不过先要启动交互 // 启用javascript mWebView.getSettings().setJavaS ...

  2. struts2中获取request、response,与android客户端进行交互(文件传递给客户端)

    用struts2作为服务器框架,与android客户端进行交互需要得到request.response对象. struts2中获取request.response有两种方法. 第一种:利用Servle ...

  3. Android JS桥交互("Uncaught ReferenceError: xxx is not defined or xxx has no method")

    网上android和js交互的代码有不少,也很容易搜到.最近在做的项目需要用到js桥,遇到了一些问题,记录下来,希望以后遇到能马上解决掉. 一开始我找的demo是从这个:http://blog.csd ...

  4. Android与Unity交互研究

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/46733221 Android与Unity交互研究 unity与android交互的由来 ...

  5. Android系统UI交互控件Action Bar初探

    过年期间,Google正式宣布取消Android系统中MENU键的使用,也就是基于Android 4.0系统的手机都应没有MENU这一固定按键.这无疑是个变革性的改动,在我眼中,这似乎把Android ...

  6. Unity与Android之间的交互之AndroidManifest

    https://blog.csdn.net/qq_15003505/article/details/70231975 AndroidManifest,中文名一般称之为清单文件.它描述了应用程序的组件的 ...

  7. 转 【Android】- Android与html5交互操作

    转自:https://blog.csdn.net/baidu_35701759/article/details/70314812 1. Android提供了WebView控件可访问网页 通过webVi ...

  8. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  9. Android与H5交互

    1.初始化WebView控件 webView = (WebView) findViewById(R.id.webview); 2.设置WebView属性 WebSettings webSettings ...

  10. Android—android与js交互以及相互传参

    Android中可以通过WebView来实现与js的交互,让用户可以在android客户端看到js写的页面,接下来为大家介绍的就是怎样实现此功能: 首先android项目目录下有“assets”文件夹 ...

随机推荐

  1. 如何使用hardware breakpoint

    要使用内核的硬件断点(hardware breakpoint)来定位内核模块中的内存访问问题,你可以通过以下步骤进行设置和调试. 1. 确定要监控的内存地址 首先,你需要确定你想要监控的内存地址.这可 ...

  2. 一篇文章彻底讲懂malloc的实现(ptmalloc)

    一.前言 C语言提供了动态内存管理功能, 在C语言中, 程序员可以使用 malloc() 和 free() 函数显式的分配和释放内存. 关于 malloc() 和free() 函数, C语言标准只是规 ...

  3. 手动检查 token 是否过期

    1.在 存储 token 的时候说明登录了 此时 把时间戳记录一下  js-cookies - auth.js // 导入 js-cookie 用于操作 cookies import Cookies ...

  4. vue-template-admin 模板

    1. 替换登录页的样式 2. settings.js 3. layout 文件夹 4. store 文件夹 4.1 app.js

  5. windows下安装部署 hadoop

    一.安装下载 1.首先在hadoop官网下载一个稳定版本,选择binary包 官网地址:https://hadoop.apache.org/releases.html 下载下来是tar.gz文件,用w ...

  6. 《使用Gin框架构建分布式应用》阅读笔记:p77-p87

    <用Gin框架构建分布式应用>学习第5天,p77-p87总结,总计11页. 一.技术总结 1.Go知识点 (1)context 2.on-premises software p80, A ...

  7. C++内存模型实践探索

    前言 C++对象模型是个常见.且复杂的话题,本文基于Itanium C++ ABI通过程序实践介绍了几种 简单C++继承 场景下对象模型,尤其是存在虚函数的场景,并通过图的方式直观表达内存布局.本文展 ...

  8. SQLServer数据库事务级别

    EFCore自动创建的数据库在SQLSERVER时是READ_COMMITTED_SNAPSHOT,SQLSERVER创建数据库默认是READ_COMMITTED. 因此记录一下查看和修改的方法,以便 ...

  9. spark和scala的搭建

    Scala--部署安装步骤 (1)上传并解压安装scala安装包 例:tar -zxvf scala--** -C 指定位置 (2)设置环境变量 vim /etc/profile export SCA ...

  10. house of stom

    完成事项 house of stom学习 未完成事项 wmctf的blineless没打通 如何解决未完成事项 下周待做事项 house of orange house of lore 本周学习的知识 ...