我正在使用两张图片(img_heart_1
和img_heart_2
)。我有两个动画,一个翻译和其他缩放text_anim.xml: animi(Animation)
,bounce_up.xml :bounce_up_anim(Animation)
同步:同时显示两个图像动画。
独家:两个动画(每个图像一个)
AnimationUtils.loadAnimation(this, R.anim.Same)
)用于两个图像动画。结果是连续的和不同的动画,预期的结果。但如果我从secAnim.execute();
剪切firstAnimationAsync
并放入onResume
,则两个动画都会同时播放,只有一次
如果我将secAnim.execute()
保留在onResume()
中,并将img_heart_2.startAnimation(animi);
代替img_heart_2.startAnimation(bounce_up_anim);
,则会同时运行一次。
如果我将secAnim.execute()
放在onPostExecute()
的{{1}}并保留firstAnimationAsync
两个图片,现在,第一个动画将首次运行,第二个动画将运行
为什么会这样?
此外,如果同时进行两个图像,则第二个图像看起来有点按压(垂直向底部压缩)。我还把startAnimation(animi)
,(现在评论过)不应该取消该动画吗?
我还希望我的翻译动画坚持结束而不是反弹或变得不可见。
代码: text_anim.xml
da=null
代码: bounce_up.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
>
<translate
android:fromXDelta="0"
android:toXDelta="50"
android:fromYDelta="0"
android:toYDelta="100"
android:duration="3000"
android:fillAfter="false"/>
</set>
代码: anidro.java
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale
android:fromXScale="1.0"
android:toXScale="2.0"
android:fromYScale="1.0"
android:toYScale="3.0"
android:pivotX="50%"
android:pivotY="0%"
android:duration="3000"/>
</set>
答案 0 :(得分:1)
我知道这是一个老问题,但为了将来参考,您可以使用AnimationSet.Builder
Builder对象是一个实用程序类,便于将动画添加到AnimatorSet以及各种动画之间的关系。 Builder方法的意图以及AnimatorSet的play()方法的目的是使以自然方式表达动画的依赖关系成为可能。如果这些方法适合需要,开发人员也可以使用playTogether()和playSequentially()方法,但在某些情况下,可能更容易成对地表达Animator动画集。
例如,这会设置一个AnimatorSet来同时播放anim1和anim2,anim3在anim2完成时播放,anim4播放anim3结束时播放:
AnimatorSet s = new AnimatorSet();
s.play(anim1).with(anim2);
s.play(anim2).before(anim3);
s.play(anim4).after(anim3);
答案 1 :(得分:0)
你真的不应该使用ASyncTask进行图形化处理。没人能准确预测何时在系统中执行任务,所以这是一个非常糟糕的主意。
为什么不使用Animation Listener?您只需要创建第一个动画,并添加一个新的动画侦听器,它将在第一个动画的开头或结尾处启动第二个动画。
要使动画无效,只需调用
即可img_heart.clearAnimation();
为了坚持到底,我不确定你想要什么,但可能你希望你的图像保持在动画结束时的位置,所以,你需要在动画中设置这个属性声明:
android:fillAfter="true"
android:fillBefore="false"
android:fillEnabled="true"
只有fillAfter似乎是强制性的,所以先试试,但如果不起作用,请添加下两行。