如何用android动画移动/改变对象的方向?

问题描述 投票:1回答:1

我试图在android中制作一个简单的“乒乓”应用程序,但我无法找到重复基本动画的模式,如

TranslateAnimation(fromX,toX,fromY,toY);

我想让一个球在屏幕的边界上弹跳,我该如何动态改变方向?

android animation
1个回答
0
投票

首先,对于乒乓球比赛,我强烈建议您使用自定义视图进行渲染。话虽这么说,你可以做的是以编程方式创建你的Animation实例,以便你可以计算x和y值。假设你有一个类似的布局

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <View
        android:id="@+id/view"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:background="#ffff0000" />

</FrameLayout>

所以你要上下调整View的动画

class MainActivity : AppCompatActivity(), Animation.AnimationListener {

    private lateinit var view: View
    private var viewX = 0f
    private var viewY = 0f
    private var dstX = 0f
    private var dstY = 0f

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        view = findViewById(R.id.view)
        startViewAnimation()
    }

    private fun startViewAnimation(){
        dstX = Random().nextFloat()
        dstY = if (viewY == 1f) 0f else 1f

        val animation = TranslateAnimation(
                Animation.RELATIVE_TO_PARENT, viewX,
                Animation.RELATIVE_TO_PARENT, dstX,
                Animation.RELATIVE_TO_PARENT, viewY,
                Animation.RELATIVE_TO_PARENT, dstY
        )
        animation.duration = 1000L
        animation.setAnimationListener(this)
        animation.fillAfter = true
        view.startAnimation(animation)
    }

    override fun onAnimationEnd(animation: Animation?) {
        viewX = dstX
        viewY = dstY
        startViewAnimation()
    }

    override fun onAnimationStart(animation: Animation?) = Unit
    override fun onAnimationRepeat(animation: Animation?) = Unit

}

y坐标在0和1之间交替,因为球(正方形)上下上下。 x只是一个随机值。

xy值是父母大小的百分比。

当动画结束时,您只需使用新的目标坐标开始一个新动画。

© www.soinside.com 2019 - 2024. All rights reserved.