动画问题

发布于 2024-11-29 17:03:50 字数 1423 浏览 1 评论 0原文

我正在尝试设置一个简单的动画,在屏幕右上角拍摄图像,将其移动到 30% 点,绕圈移动,然后移回边缘。见下图。然而,当前的脚本做了一些奇怪的事情,虽然它最终出现在正确的位置,但在此之前几乎没有什么是正确的。此外,根据 Android 版本和屏幕尺寸,它可能会做更多疯狂的事情。任何帮助将不胜感激。谢谢!

在此处输入图像描述

几个要点。我希望开始时的左边缘始终面向运动方向。我想要一个从左向右移动的圆周运动,但如果做不到,我就不会这样做,只要第一部分成立。

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:shareInterpolator="true">
    <set>
        <translate
            android:fromXDelta="0%p" android:toXDelta="0%p"
            android:fromYDelta="00%p" android:toYDelta="20%p"
            android:duration="001" android:startOffset="0"/>
        <translate
            android:fromXDelta="0%p" android:toXDelta="-80%p"
            android:fromYDelta="00%p" android:toYDelta="0%p"
            android:duration="2000" android:startOffset="1"/>
    </set>
    <set>
        <rotate 
            android:fromDegrees="180"
            android:toDegrees="0" 
            android:pivotY="20%p"
            android:duration="1000"
            android:startOffset="2000"/>
        <translate
            android:fromXDelta="0%p" android:toXDelta="70%p"
            android:fromYDelta="00%p" android:toYDelta="0%p"
            android:duration="100" 
            android:startOffset="3000"/>
    </set>
</set>

I'm trying to set up a simple animation that takes an image on the upper right hand side of the screen, moves it to the 30% point, moves in a circle, and them moves back to the edge. See the figure below. However, the current script does strange things, and while it ends up in the right place, almost nothing seems right before that. Also, depending on the Android version and screen size, it might do even more wild things. Any help would be much appreciated. Thanks!

enter image description here

A couple of key points. I want the left edge at the beginning to always be facing the direction of motion. I would like a circular motion where it moves from left to right, but if it can't be done, I'm not set on it, so long as the first part holds true.

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:shareInterpolator="true">
    <set>
        <translate
            android:fromXDelta="0%p" android:toXDelta="0%p"
            android:fromYDelta="00%p" android:toYDelta="20%p"
            android:duration="001" android:startOffset="0"/>
        <translate
            android:fromXDelta="0%p" android:toXDelta="-80%p"
            android:fromYDelta="00%p" android:toYDelta="0%p"
            android:duration="2000" android:startOffset="1"/>
    </set>
    <set>
        <rotate 
            android:fromDegrees="180"
            android:toDegrees="0" 
            android:pivotY="20%p"
            android:duration="1000"
            android:startOffset="2000"/>
        <translate
            android:fromXDelta="0%p" android:toXDelta="70%p"
            android:fromYDelta="00%p" android:toYDelta="0%p"
            android:duration="100" 
            android:startOffset="3000"/>
    </set>
</set>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦言归人 2024-12-06 17:03:50

我在一个新的 android 项目中使用主 xml 布局中的按钮执行了此操作。它起作用了。所有百分比都是相对于视图位置的父级大小。

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate android:fromXDelta="0%p" android:toXDelta="-80%p"
    android:fromYDelta="0%p" android:toYDelta="0%p" 
    android:duration="2000" />

<rotate android:fromDegrees="0" android:toDegrees="-180"
        android:pivotX="-70%p" android:pivotY="10%p" android:duration="1000"
        android:startOffset="2000" />

<translate  
    android:fromXDelta="0%p" android:toXDelta="80%p"
    android:fromYDelta="0%p" android:toYDelta="0%p" android:duration="2000"
    android:startOffset="3000" />

</set>

I did this in a new android project with a button in the main xml layout. It worked. All percentages are of parent size, relative to the view's position.

<?xml version="1.0" encoding="utf-8"?>

<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate android:fromXDelta="0%p" android:toXDelta="-80%p"
    android:fromYDelta="0%p" android:toYDelta="0%p" 
    android:duration="2000" />

<rotate android:fromDegrees="0" android:toDegrees="-180"
        android:pivotX="-70%p" android:pivotY="10%p" android:duration="1000"
        android:startOffset="2000" />

<translate  
    android:fromXDelta="0%p" android:toXDelta="80%p"
    android:fromYDelta="0%p" android:toYDelta="0%p" android:duration="2000"
    android:startOffset="3000" />

</set>
一抹微笑 2024-12-06 17:03:50

我尝试创建您绘图中描述的动画。我将动画分成 2 个文件
left_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:shareInterpolator="true">
    <set>
        <translate
            android:fromXDelta="0%p" android:toXDelta="-80%p"
            android:fromYDelta="00%p" android:toYDelta="0%p"
            android:duration="2000" android:startOffset="0"/>
         <translate
            android:fromXDelta="0%p" android:toXDelta="0%p"
            android:fromYDelta="00%p" android:toYDelta="20%p"
            android:duration="2000" android:startOffset="2000"/>         
    </set>
</set>

right.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="-80%p" android:toXDelta="0%p" android:fromYDelta="20%p" 
    android:toYDelta="20%p" android:duration="2000" android:fillAfter="true"/>

这是我在活动中使用的代码

image = (ImageView)findViewById(R.id.image);

        anim = AnimationUtils.loadAnimation(this, R.anim.left_down);
        goBack = AnimationUtils.loadAnimation(this, R.anim.right);
        anim.setAnimationListener(new AnimationListener() {            
            @Override
            public void onAnimationStart(Animation animation) {}

            @Override
            public void onAnimationRepeat(Animation animation) {}

            @Override
            public void onAnimationEnd(Animation animation) {
                image.startAnimation(goBack);    
            }
        });
image.startAnimation(anim);

I tried to create the animation described in your drawing. I split the animation in 2 files
left_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/linear_interpolator"
    android:shareInterpolator="true">
    <set>
        <translate
            android:fromXDelta="0%p" android:toXDelta="-80%p"
            android:fromYDelta="00%p" android:toYDelta="0%p"
            android:duration="2000" android:startOffset="0"/>
         <translate
            android:fromXDelta="0%p" android:toXDelta="0%p"
            android:fromYDelta="00%p" android:toYDelta="20%p"
            android:duration="2000" android:startOffset="2000"/>         
    </set>
</set>

right.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromXDelta="-80%p" android:toXDelta="0%p" android:fromYDelta="20%p" 
    android:toYDelta="20%p" android:duration="2000" android:fillAfter="true"/>

And this is the code I used in the activity

image = (ImageView)findViewById(R.id.image);

        anim = AnimationUtils.loadAnimation(this, R.anim.left_down);
        goBack = AnimationUtils.loadAnimation(this, R.anim.right);
        anim.setAnimationListener(new AnimationListener() {            
            @Override
            public void onAnimationStart(Animation animation) {}

            @Override
            public void onAnimationRepeat(Animation animation) {}

            @Override
            public void onAnimationEnd(Animation animation) {
                image.startAnimation(goBack);    
            }
        });
image.startAnimation(anim);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文