2011-08-25 67 views
0

我想提出两个与他们翻译在android系统有问题的动画和:的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调用countdowntimer: 图像.startAnimation(阿尼姆);我试着听动画: anim.setAnimationListener(this);

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

但它没有帮助我。 有谁知道我能做些什么来解决它?

-

  1. 我试图表现出“流星”的形象 - 我创建了一个小的PNG文件(* 30像素30像素)和IM试图将它定位在屏幕的一个边缘让它移动到另一个并消失。但是我在动画XML中编写的每个代码都没有这样做! 任何人都可以帮我正确写出动画吗?

我写道:翻译 机器人:fromXDelta = “100%p” 的机器人:toXDelta = “ - 100%P” 机器人:fromYDelta = “0%P” 机器人:toYDelta =“100%P “机器人:时间=” 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> 

,现在,它完美的作品!

回答

1

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

+1

好的,我找到了一个解决方案。我试图写我自己的循环显示,而不是使用android的代码。我删除了计时器,并添加到动画以下代码:android:repeatCount =“infinite”android:repeatMode =“restart”android:fillAfter =“false”它的效果很好。 – Ofershap

+0

啊这很好。重复动画并让它重新开始。 – Varun

+0

我发现另一个问题 - onAnimationRepeat方法永远不会被调用。我认为它是一个android平台的bug。 – Ofershap