Android -> 如何动画到新位置

Posted

技术标签:

【中文标题】Android -> 如何动画到新位置【英文标题】:Android -> how to animate to the new position 【发布时间】:2011-11-09 03:42:21 【问题描述】:

这里是简单的 xml android 动画:

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="-110"
    android:toYDelta="-110" android:duration="1000" android:fillAfter="true" />

我想将动画对象从屏幕中心移动到 0, 0 个位置。 cat 我是怎么做到的(它应该适用于所有屏幕分辨率)


我的回答:

谢谢你们的帮助。但是我已经通过其他方式解决了我的问题,动态地,没有 xml。下面是这个方法的完整代码:

public void replace(int xTo, int yTo, float xScale, float yScale) 
        // create set of animations
        replaceAnimation = new AnimationSet(false);
        // animations should be applied on the finish line
        replaceAnimation.setFillAfter(true);

        // create scale animation
        ScaleAnimation scale = new ScaleAnimation(1.0f, xScale, 1.0f, yScale);
        scale.setDuration(1000);

        // create translation animation
        TranslateAnimation trans = new TranslateAnimation(0, 0,
                TranslateAnimation.ABSOLUTE, xTo - getLeft(), 0, 0,
                TranslateAnimation.ABSOLUTE, yTo - getTop());
        trans.setDuration(1000);

        // add new animations to the set
        replaceAnimation.addAnimation(scale);
        replaceAnimation.addAnimation(trans);

        // start our animation
        startAnimation(replaceAnimation);
    

【问题讨论】:

我认为你在 fromYDelta 之前遗漏了“android:” nurne,是的,谢谢。但我的问题仍然存在 好的,我正在编写一个测试应用程序来帮助您,所以让我更好地解决问题。您在屏幕中心有一个 UI 元素(它的中心在中心,或者它的左上角在中心?)并且您想使用动画在 1 秒内将其移动到 0,0(再次-它的中心或左上角到0,0?) 我想改变 TextView 的 x 和 y 位置。它的位置在中心 - 中心。我想使用动画工具移动到屏幕的左上方 【参考方案1】:

我的解决方案:

谢谢你们的帮助。但是我已经通过其他方式解决了我的问题,动态地,没有 xml。下面是这个方法的完整代码:

public void replace(int xTo, int yTo, float xScale, float yScale) 
        // create set of animations
        replaceAnimation = new AnimationSet(false);
        // animations should be applied on the finish line
        replaceAnimation.setFillAfter(true);

        // create scale animation
        ScaleAnimation scale = new ScaleAnimation(1.0f, xScale, 1.0f, yScale);
        scale.setDuration(1000);

        // create translation animation
        TranslateAnimation trans = new TranslateAnimation(0, 0,
                TranslateAnimation.ABSOLUTE, xTo - getLeft(), 0, 0,
                TranslateAnimation.ABSOLUTE, yTo - getTop());
        trans.setDuration(1000);

        // add new animations to the set
        replaceAnimation.addAnimation(scale);
        replaceAnimation.addAnimation(trans);

        // start our animation
        startAnimation(replaceAnimation);
    

【讨论】:

如何计算 xTo、yTo、xScale 和 yScale?有什么用?【参考方案2】:

首先,在占据整个屏幕的容器中插入对象。然后像这样修改你的动画xml

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="50%p" android:fromYDelta="50%p" 
    android:toXDelta="0%p" android:toYDelta="0%p" 
    android:duration="1000" 
    android:fillAfter="true" />

你也可以查看这个android API参考http://developer.android.com/guide/topics/resources/animation-resource.html#translate-element

%p 后缀将元素转换为“相对于父大小的百分比”。

【讨论】:

【参考方案3】:

如果您希望它在所有屏幕上工作,您将无法对 x,y 值进行硬编码。动画允许您使用百分比。此动画会将您的视图从 0% x 和 y(相对于自身。换句话说,它在动画之前的任何位置都将从那里开始)它将移动到 0%px 和 y(这意味着相对于父母)这应该带你到左上角。根据您想要的拐角距离,您可以尝试 5%p 或 10%p 以获得一些额外的边距。

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0%" android:fromYDelta="0%" android:toXDelta="0%p"
    android:toYDelta="0%p" android:duration="1000" android:fillAfter="true" />

【讨论】:

以上是关于Android -> 如何动画到新位置的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JQuery UI 动画到新的“位置”

android 如何做移动的动画呢 谢谢大家~~

动画过渡没有从正确的位置开始

在Flex 4中动画子元素

Android 知识要点整理(11)----Scenes and Transitions(场景和变换)

如何将 SwiftUI 状态从特定值更改为新状态值设置动画?