Android动画:将视图移动到另一个视图

10

我在不同布局中有两个视图,我想把一个移动到另一个布局中。我的代码哪里出了问题?Y轴的动画表现不正常。第一个视图位于片段布局中,第二个位于状态栏中。

    ...
    int p1[] = new int[2];
    int p2[] = new int[2];
    viewOne.getLocationInWindow(p1);
    viewTwo.getLocationInWindow(p2);


    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet
            .play(ObjectAnimator.ofFloat(expandedImageView, "X", p1[0], p2[0] - p1[0]))
            .with(ObjectAnimator.ofFloat(expandedImageView, "Y", p1[1], p2[1] - p1[1]))
            .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, startScale))
            .with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y, startScale));

它怎么会播放错误? - Whitney
@Whitney 它应该移动到屏幕的角落,但是 y 值没有增长。 - punksta
请查看我的答案,它与此直接相关: https://dev59.com/OaLia4cB1Zd3GeqPdhjR#47593484 - Fernando Prieto Moyano
2个回答

28

我有另一个解决方案:(将viewOne移动到viewTwo)

 TranslateAnimation animation = new TranslateAnimation(0, viewTwo.getX()-viewOne.getX(),0 , viewTwo.getY()-viewOne.getY());
    animation.setRepeatMode(0);
    animation.setDuration(3000);
    animation.setFillAfter(true);
    viewOne.startAnimation(animation); 

抱歉,我尝试了这段代码,但它并没有按照预期的方式工作。 我有一个ImageView,我想将它移动到另一个固定的ImageView上, 但实际上我的图像在对角线方向上向上移动了一些。 - Cristian Babarusi
注意:在初始化期间,视图将返回位置0,尝试在“new Handler().postDelayed(new Runnable{}, 200);”中执行此操作。 - Kirill Karmazin
@KirillKarmazin,除了使用Handler之外,您还可以在viewTreeObserver上使用onGlobalLayoutListener,以便将上述代码放置在viewTwo.viewTreeObserver.addOnGlobalLayoutListener { // Animation code here }中。 - Darwind

1

试试这个

private fun moveView(viewToBeMoved: View, targetView: View) {
    val targetX: Float =
        targetView.x + targetView.width / 2 - viewToBeMoved.width / 2
    val targetY: Float =
        targetView.y + targetView.height / 2 - viewToBeMoved.height / 2

    viewToBeMoved.animate()
        .x(targetX)
        .y(targetY)
        .setDuration(2000)
        .withEndAction {
            targetView.visibility = View.GONE
        }
        .start()
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接