7

我正在尝试做一个 alpha 并在 RelativeLayout 中进行翻译。我定义了两者:

AlphaAnimation alpha;
alpha = new AlphaAnimation(0.0f, 1.0f);
alpha.setDuration(1500);
alpha.setFillAfter(true);

TranslateAnimation translate;
translate = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0,                                                                       
                 Animation.RELATIVE_TO_SELF, 0,
                 Animation.RELATIVE_TO_SELF, 1, 
                 Animation.RELATIVE_TO_SELF, 0);
translate.setDuration(1000);

所以我在我的 RelativeLayout 中开始动画

RelativeLayout.startAnimation(translate);
RelativeLayout.startAnimation(alpha);

问题是在这种情况下,只有 alpha 动画开始而不是翻译。有人能帮我吗?问题是如何在同一个对象中同时启动两个不同的动画(在我的例子中是相对布局)


我解决了这个问题。我添加了它:

AnimationSet animationSet = new AnimationSet(true);
animationSet.addAnimation(alpha);
animationSet.addAnimation(translate);

RelativeLayout.startAnimation(animationSet);
4

2 回答 2

7

如果要同时运行两个动画,可以使用动画集:

http://developer.android.com/reference/android/view/animation/AnimationSet.html

例如;

as = new AnimationSet(true);
as.setFillEnabled(true);
as.setInterpolator(new BounceInterpolator());

TranslateAnimation ta = new TranslateAnimation(-300, 100, 0, 0); 
ta.setDuration(2000);
as.addAnimation(ta);

TranslateAnimation ta2 = new TranslateAnimation(100, 0, 0, 0); 
ta2.setDuration(2000);
ta2.setStartOffset(2000); // allowing 2000 milliseconds for ta to finish
as.addAnimation(ta2);
于 2014-07-22T13:34:21.557 回答
6

您当前的代码将不起作用,因为一旦第一个动画开始,第二个动画就会结束并自行启动。所以你需要等到它完成。

尝试这个 :

translate.setAnimationListener(new AnimationListener() {

    public void onAnimationStart(Animation animation) {
        // TODO Auto-generated method stub

    }

    public void onAnimationRepeat(Animation animation) {
        // TODO Auto-generated method stub

    }

    public void onAnimationEnd(Animation animation) {
        // TODO Auto-generated method stub
        RelativeLayout.startAnimation(alpha);
    }
});

如果您想同时执行它们,我建议您在 res/anim/ 文件夹中创建一个 animation.xml 文件。

例子:

<?xml version="1.0" encoding="utf-8"?>
<set
 xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0"
android:fromYScale="1.0"
 android:toXScale=".75"
 android:toYScale=".75"
 android:duration="1500"/>
<rotate
android:fromDegrees="0"
 android:toDegrees="360"
 android:duration="1500"
 android:pivotX="50%"
 android:pivotY="50%" />
<scale
android:fromXScale=".75"
 android:fromYScale=".75"
 android:toXScale="1"
 android:toYScale="1"
 android:duration="1500"/>
</set>

Java 代码:

 Animation multiAnim = AnimationUtils.loadAnimation(this, R.anim.animation);
    RelativeLayout.startAnimation(multiAnim);
于 2013-01-19T17:15:21.187 回答