android spine动画教程,SpineRuntime-Presentation - 基于 spine-libgdx 实现在 AndroidPresentation 上展示 Spine 动画...

SpineRuntime-Presentation - 基于 spine-libgdx 实现在 AndroidPresentation 上展示 Spine 动画

SpineRuntime-Presentation

基于 spine-libgdx 实现在 AndroidPresentation 上展示 Spine 动画

Github地址

效果

可以在 Android 的 Presentation 页面上通过 GLSurfaceView 展示 Spine 动画,Spine 动画可以叠加,互不干扰

使用PUSurfaceView替代PopupWindow在 Spine 动画的 GLSurfaceView 上层展示其他 View

注意

Presentation 需要 android.permission.SYSTEM_ALERT_WINDOW、android.permission.WRITE_SETTINGS 两个权限

虚拟机运行可能报错

Spine动画的缩放适配可能需要手动修改SpineBaseAdapter,现有的适配需要动画的中心在(0,-1)

Spine 动画需要参照 Demo 通过回调依次创建

Spine 动画的回调不是主线程,操作 view 需要异步到主线程

新创建的 Spine 动画 View 的 zOrder 始终为 top

使用

调用请参考 app module 的 SpinePresentation.kt

1. 加载GDX

companion object {

init {

GdxNativesLoader.load()

}

}

2. 创建Adapter

创建自定义 adapter 继承 SpineBaseAdapter,在onCreateImpl()回调中设置动画数据,在onCreatedImpl()中设置 skim 与 animation,也可以在创建 adapter 后设置。

abstract class SpineBaseAdapter : ApplicationAdapter {

var tag = "null" // 用于onCreated异步回调的tag

var skinName = "default" // 默认皮肤名称

var animationName = "animation" // 默认动画名称

var debugMode = false // 默认关闭debug

var isClickable = true // view是否可被点击,默认为true

constructor(padding: Int = 0)

constructor(paddingStart: Int, paddingTop: Int, paddingEnd: Int, paddingBottom: Int)

/**

* 动画的点击回调

*/

fun setOnSpineClickListener(spineClickListener: OnSpineClickListener)

/**

* 动画的创建完成回调

* 多个Spine动画对象需要依次创建,不可以同时创建多个

* 多以需要设置创建完成的异步回调,并配合tag来进行判断

*/

fun setOnCreatedListener(onSpineCreatedListener: OnSpineCreatedListener)

/**

* 根据altasPath与skeletonPath初始化之后的回调

* 用于setSkin、setAnimation、setAttachment

*/

abstract fun onCreatedImpl()

/**

* 点击事件回调

*/

abstract fun doClick()

/**

* 设置Spine的Altas路径

* @param path 路径

* @param fileType [FileType]

*/

fun setAltasPath(path: String, fileType: FileType)

/**

* 设置Spine的json文件路径

*/

fun setSkeletonPath(path: String, fileType: FileType)

/**

* 设置动画

*/

fun setAnimation(trackIndex: Int, animationName: String, loop: Boolean)

/**

* 实例开始创建回调

* 在这里设置Altas与SkeletonPath

*/

abstract fun onCreateImpl()

/**

* 换装饰

*

* @param slotName 插槽名称

* @param attachmentName 装饰名称

* @return

*/

fun setAttachment(slotName: String, attachmentName: String): Boolean

/**

* 换肤

*

* @param skinName 皮肤名称

* @return

*/

fun setSkin(skinName: String): Boolean

/**

* 创建完成的回调

*/

interface OnSpineCreatedListener {

fun onCreated(tag: String)

}

/**

* 创建 SurfaceView 对象

*/

@Synchronized

fun create(activity: Activity): View

}

3. 创建 view 与展示

调用 adapter 的create(activity: Activity)方法创建 view,并将 view 添加到 parentView 中。

4. 在 Spine 上层绘制纯色与图片

使用PUSurfaceView可以在 Spine 动画上层绘制纯色与图片。PUSurfaceView仅实现了简单的SurfaceView绘制功能。

android:layout_width="match_parent"

android:layout_height="match_parent"

app:bgColor="#88000000"

app:imageSrc="@mipmap/ic_launcher"

app:drawType=" " />

5. 动态创建 PUSurfaceView

class PUSurfaceView : SurfaceView{

constructor(context: Context, attrs: AttributeSet)

constructor(context: Context, attrs: AttributeSet = null, defStyleAttr: Int = 0)

constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int)

/**

* 根据传入的color绘制纯色

*/

fun drawColor(color: Int)

/**

* 根据传入id绘制图片

*/

fun drawImage(id: Int)

}

TODO

优化 PUSurfaceView

优化 Spine 动画的缩放适配

优化 Spine 动画的动态 View 创建,不再需要提前在 container 上定义宽高

SpineRuntime-Presentation - 基于 spine-libgdx 实现在 AndroidPresentation 上展示 Spine 动画 相关文章

2020-2021 ACM-ICPC, Asia Seoul Regional Contest

C. Dessert Café: 题意: 给你一个N个节点的树,树上有m个房子,问树上有几个节点是在两个房子之间的。 思路: 我们发现只要是该节点的子树里包括了所有节点或者只有一个节点,那么这个结点肯定不是在两个房子之间的,至于证明我们可以画几幅图证明。代码实

SQL Server存储过程

Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 一、存储过程的概念 存储过程Procedure是一组为了完成特定功能

Oracle11g下载、安装、客户端安装、PLSQL远程连接数据库(即监听配置)及环境变量配置

一、oracle11g、oracle11g下载 链接:https://pan.baidu.com/s/1mB7tukSiFPgF9Y9AfypaIQ 提取码:root Oracle11g安装包(解压缩后):已将两个压缩包解压到同一目录下,官网下载压缩包一般有两个。 ※注意:解压路径名称最好不要出现 中文 和 空格 等不规则符

解决 DatePickerDialog 在 Android7.0 API24 上使用 AlertDialog.THEME_TRADITIONAL、AlertDialog.THEME_HOLO_DARK、AlertDialog.THEME_HOLO_LIGHT等样式时无法显示为 Spinner 样式的问题

DatePickerDemoForAndroid24 解决 DatePickerDialog 在 Android7.0 API24 上使用 AlertDialog.THEME_TRADITIONAL 、 AlertDialog.THEME_HOLO_DARK 、 AlertDialog.THEME_HOLO_LIGHT 等样式时无法显示为 Spinner 样式的问题。 完整项目与演示地址 Github API2

charles-rewrite用法详讲解

Rewrite 功能适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。 可以重写接口所有元素的内容: header 、 host 、 url 、 path 、 query param 、 response status 、 body . 具体操作如下: 1.点击Charles菜单栏 Tools 中的 Rewrite , image.

13K点赞都基于 Vue+Spring 前后端分离管理系统ELAdmin,大爱

其实项目网上有很多了,但是教程比较详细的没多少,今天分享的项目从安装部署到代码具体功能都有很详细都说明 eladmin 是一款基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制

ajax

ajax:async javascript and xml - 异步的js和xml 作用:发送http请求浏览器 - 服务器 请求服务器 - 浏览器 响应 xml:extension markup language - 可扩展的标记语言 - 自定义标签 通过button点击使用ajax // 点击按钮发送http请求到demo.php,获取demo.php

Permutation Transformer【Splay】

题意:有N个点,初始从1至N排列,现在我们对数轴上第l到第r区间内的所有的点进行翻转操作,问经过M次操作之后,数轴上的数的排列情况。 很明显的,我们可以发现,这是一个Splay的操作,但是只有N个元素显得比较的麻烦了(细节+++),于是,我给首尾各加一个

Spring Boot快速开发企业级Admin管理后台

Erupt 可快速的构建管理页面,零前端代码、零CURD、自动建表,仅需单个类文件 + 简洁的注解配置,即可快速开发企业级Admin管理后台! 后台管理系统非常重要,但开发存在一定的痛点,如:开发效率低、界面不美观、交互不理想、工作量重复、存在安全漏洞、后端

Mybatis缓存详解

Mybatis缓存 执行流程 进行数据库查询,首先查看二级缓存有没有数据,通过MappedStatment和传入的对象,进行Hash,获取数据。有数据就取数据,没有就从数据库取数据,并放入缓存中。 缓存类别 一级缓存 SqlSession Statemen Mybatis的一级缓存是关闭不掉的,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值