【问题标题】:Android Animation positioning ProblemsAndroid动画定位问题
【发布时间】:2012-08-08 10:54:45
【问题描述】:

我正在尝试在 android 中制作两个翻译动画并遇到问题:

  1. 我正在尝试显示从一侧进入并从另一侧退出的图像,并重复执行几分钟。我可以看到移动,但每次动画开始时 - 我都会看到图像闪烁一毫秒。

这是我的布局 xml:

    <?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:background="@drawable/bg"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

    <ImageView  android:id="@+id/anim_image" android:src="@drawable/movimage"
                android:layout_width="wrap_content" android:layout_height="wrap_content"
                android:visibility="invisible"  android:layout_marginTop="30dp"
    />

</FrameLayout>

这是我的动画 xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
 android:fromDegrees="40" android:toDegrees="-40" android:toYScale="0.0"
 android:pivotX="40%" android:pivotY="30%" android:duration="4000" />
     <set>
        <translate 
            android:fromXDelta="200%p" android:toXDelta="-150%p" android:fromYDelta="20%"
            android:toYDelta="10%" android:duration="4000" android:zAdjustment="bottom" />
    </set>
 </set>

在我的 java 类中,我创建了一个倒数计时器,每个 onTick 都会调用它: image.startAnimation(anim);

我也试过听动画: anim.setAnimationListener(this);

并添加到 onAnimationEnd: image.setVisibility(View.GONE);

但这对我没有帮助。 有谁知道我可以做些什么来解决它?

--

  1. 我正在尝试显示“流星”图像 - 我创建了一个小 png 文件 (30px*30px) 并尝试将其定位在屏幕的一个边缘并让它移动到另一个边缘并消失.但是我在动画 XML 中编写的每个代码都没有这样做! 谁能帮我正确地编写动画?

我写过:翻译 安卓:fromXDelta="100%p" 安卓:toXDelta="-100%p" 安卓:fromYDelta="0%p" android:toYDelta="100%p" android:duration="500"

它没有工作..


编辑:我找到了解决方案:

我发现了问题所在。我用 CountDownTimer 编写了一个用于重复的代码,而不是使用动画的重复选项。我已将我的 XML 更改为:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:startOffset="1000"
>
    <rotate
            android:repeatCount="infinite" android:repeatMode="restart" android:fillAfter="false"
            android:fromDegrees="40" android:toDegrees="-40" android:toYScale="0.0"
            android:pivotX="40%" android:pivotY="30%" android:duration="4000" />
     <set>
        <translate 
            android:repeatCount="infinite" android:repeatMode="restart" android:fillAfter="false"
            android:fromXDelta="100%p" android:toXDelta="-100%p" android:fromYDelta="20%"
            android:toYDelta="10%" android:duration="4000" android:zAdjustment="bottom" />
    </set>
 </set>

现在它可以在屏幕上没有闪烁的情况下工作。 同样对于流星,我已将 XML 更改为:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate 
            android:repeatCount="infinite" android:repeatMode="restart" android:fillAfter="false"
            android:fromXDelta="100%p" android:toXDelta="-100%p" android:fromYDelta="0%p"
            android:toYDelta="100%p" android:duration="2500" android:zAdjustment="bottom" />
     <set>
     <alpha 
        android:repeatCount="infinite" android:repeatMode="restart" android:fillAfter="false"
        android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="2500" />
    </set>
 </set>

现在它完美运行了!

【问题讨论】:

    标签: android xml animation


    【解决方案1】:

    我认为imageView在动画完成后会回到原来的位置。您可以尝试在翻译动画的 xml 中包含 android:fillAfter="true|false"(尝试其中之一)。或者如果您使用AnimationUtils 加载动画对象,请尝试setFillAfter(boolean)

    【讨论】:

    • 好的,我找到了解决方案。我尝试编写自己的循环显示而不是使用 android 的代码。我删除了计时器,并在动画中添加了以下代码: android:repeatCount="infinite" android:repeatMode="restart" android:fillAfter="false" 效果很好。
    • 我发现了另一个问题 - 永远不会调用 onAnimationRepeat 方法。我认为这是android平台中的一个错误。
    • 你是如何加载动画并设置动画监听的?
    • anim = AnimationUtils.loadAnimation(this, R.anim.move); anim.setAnimationListener(this);
    猜你喜欢
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 2021-10-13
    相关资源
    最近更新 更多