ARCore使用SceneForm框架——使用ObjectAnimator实现旋转、移动动画

更新时间:2023-06-17 11:30:55 阅读: 评论:0

ARCore使⽤SceneForm框架——使⽤ObjectAnimator实现旋转、移动动画对应 Sceneform 框架,官⽅给出了⼏个⽰例代码,其中⼀个⽰例⼯程 solarsystem (太阳系),给出了旋转动画是如何实现的
旋转动画
为了使代码看着简单,对⽰例代码中实现旋转的部分做了简化,就有了旋转节点 —— RotatingNode
class RotatingNode :Node(){
var rotationAnimation: ObjectAnimator?=null
val animationDuration =5000L
// 启动动画
fun startAnimation(){怎么搭配服装
if(rotationAnimation !=null){
return
aiw
}
rotationAnimation =createAnimator()
rotationAnimation!!.target =this
rotationAnimation!!.duration = animationDuration
rotationAnimation!!.start()
}
// 停⽌动画
fun stopAnimation(){
if(rotationAnimation ==null){
return
}
rotationAnimation!!.cancel()
rotationAnimation =null
}
// 返回⼀个 ObjectAnimator ⽤来使节点旋转起来
private fun createAnimator(): ObjectAnimator {
// 节点的位置和⾓度信息设置通过Quaternion来设置
万象城地址// 创建4个Quaternion 来设置四个关键位置
val orientation1 = Quaternion.axisAngle(Vector3(0.0f,1.0f,0.0f),0f)
val orientation2 = Quaternion.axisAngle(Vector3(0.0f,1.0f,0.0f),120f)
val orientation3 = Quaternion.axisAngle(Vector3(0.0f,1.0f,0.0f),240f)
val orientation4 = Quaternion.axisAngle(Vector3(0.0f,1.0f,0.0f),360f)
val rotationAnimation =ObjectAnimator()
rotationAnimation.tObjectValues(orientation1, orientation2, orientation3, orientation4)
jpack// 设置属性动画修改的属性为 localRotation
rotationAnimation.tPropertyName("localRotation")
// 使⽤Sceneform 框架提供的估值器 QuaternionEvaluator 作为属性动画估值器
rotationAnimation.tEvaluator(QuaternionEvaluator())
//  设置动画重复⽆限次播放。
rotationAnimation.interpolator =LinearInterpolator()
rotationAnimation.tAutoCancel(true)
return rotationAnimation
}
}
移动动画
留学咨询公司
⽰例代码虽然给出了旋转动画是怎么实现的,但是没有找到移动动画的⽰例代码
好吧,只能先看看旋转动画实现依赖的类,旋转动画的核⼼是构建动画 createAnimator,构建动画过程中关键的两个类 Quaternion、QuaternionEvaluator
去对应的包名下,发现还有 Vector3 和 Vector3Evaluator 两个类
google 的⼯程师都是有很多年经验的,命名肯定是有⼀定规则,很明显这个名字就意味着和移动相关,再看看源码
这⾥说的是线性插值的估计,基本可以断定就是实现移动动画的类,接着仿照旋转节点实现移动节点 TranslatingNode
class TranslatingNode :Node(){
private var instance =this
标准日本语初级上册var animation : ObjectAnimator?=null
autumn是什么意思var animationDuration =5000L// 动画运⾏时长
var isAutoDisamiss =true// 是否⾃动消失的开关
// 启动动画
fun startAnimation(){
if(animation !=null){
return
}
animation =createAnimator()
animation!!.target =this
animation!!.duration = animationDuration
animation!!.start()
}
// 停⽌动画
fun stopAnimation(){
if(animation ==null){
return
}
animation!!.cancel()
animation =null
}
xscale// 返回⼀个 ObjectAnimator ⽤来使节点旋转起来
private fun createAnimator(): ObjectAnimator {
// 动画开始位置
val start =Vector3(0f,0f,0f)
// 动画结束位置
val end =Vector3(0f,2f,0f)
var transAnimation =ObjectAnimator()
transAnimation.tObjectValues(start, end)
// 设置属性动画修改的属性为 localPosition
transAnimation.tPropertyName("localPosition")
transAnimation.tEvaluator(Vector3Evaluator())
transAnimation.interpolator =LinearInterpolator()
transAnimation.tAutoCancel(true)
transAnimation.addListener(object: Animator.AnimatorListener{ override fun onAnimationStart(p0: Animator?){}
override fun onAnimationCancel(p0: Animator?){}
override fun onAnimationRepeat(p0: Animator?){}
override fun onAnimationEnd(p0: Animator?){
// 上升到最顶部的时候,⾃动消失
if(isAutoDisamiss){
instance.isEnabled =fal
}
}
})
qbasicreturn transAnimation
keepthefaith
}
}
测试
代码基本都是完成了,需要⼀段测试代码
arFragment!!.tOnTapArPlaneListener{ hitResult: HitResult, plane: Plane, motionEvent: MotionEvent ->
ModelRenderable.builder()
.
tSource(this@MainActivity, R.raw.andy)// 应该使⽤ BillBoardDetail 的 rollingModelPath 属性,动态获取旋转模型的资源.build().thenAccept(
{ renderable ->
val anchor = ateAnchor()
val anchorNode =AnchorNode(anchor)
anchorNode.tParent(arFragment!!.getArSceneView().scene)
//                        val showNode = TranslatingNode() // 测试移动
val showNode =RotatingNode()// 测试旋转
showNode.tParent(anchorNode)
val show =TransformableNode(arFragment!!.transformationSystem)
show.tParent(showNode)
showNode.startAnimation()
})
}
总结
旋转和移动的动画效果,也可以不使⽤ ObjectAnimator 实现,直接控制模型的姿态也可以实现,只是相对简单的姿态是⽤代码控制会⽐较繁杂,不如直接使⽤动画简洁

本文发布于:2023-06-17 11:30:55,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/975192.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:动画   旋转   实现   移动   属性
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图