3

我正在尝试使用启动屏幕来覆盖 Google Map 加载延迟(对于 Maps v2)。

我想使用应该在几秒钟后淡出的ImageViewinFrameLayout并且能够覆盖onAnimationEnd以隐藏启动屏幕的ImageView.

当没有延迟地开始动画时,onAnimationEnd被适当地调用:

new Animations().animateAlphaForLayout(splashLayout, 2000);

问题是当我尝试启动动画时postDelayed根本onAnimationEnd没有调用:

splashLayout.postDelayed(new Runnable() {

    @Override
    public void run() {
        new Animations().animateAlphaForLayout(splashLayout, 2000);
    }

}, 3000);

类的Animations代码是这样的:

import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.LayoutAnimationController;

public class Animations {

    public void animateAlphaForLayout(final ViewGroup viewGroup, int duration) {
        AnimationSet set = new AnimationSet(true);

        Animation animation = new AlphaAnimation(1.0f, 0.0f);
        animation.setRepeatCount(0);
        animation.setFillAfter(true);
        animation.setDuration(duration);
        animation.setAnimationListener(new Animation.AnimationListener() {

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

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

            @Override
            public void onAnimationEnd(Animation animation) {
                viewGroup.setVisibility(View.GONE);
            }
        });
        set.addAnimation(animation);

        LayoutAnimationController controller = new LayoutAnimationController(set, 0.0f);
        viewGroup.setLayoutAnimation(controller);
        }

}

有谁知道为 Android 2.3 及更高版本(API 10+)执行此操作的方法?

谢谢!

4

3 回答 3

2

一个简单的解决方法,可以得到我想要的结果(即显示ImageView几秒钟,然后将其淡出并将其设置为GONE):

因为postDelayed是我之前尝试的罪魁祸首,所以我放弃了它,转而使用Animation's setStartOffset(startOffset)

这意味着我只是用最初用于postDelayed. 我仍然不知道为什么postDelayed弄乱了动画的听众。

于 2013-02-01T08:32:44.007 回答
0

我嵌套了 LinearLayouts,一个是 parentHolder,另一个是 parentHolder 内的 menuHolder。当触摸父母持有人的外面时,我隐藏了里面的人。

package com.fmc.component;

import com.fmc.marketing.tanitim.R;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationSet;
import android.widget.LinearLayout;

public class NavigatorTest {

public void AnimeEt(LinearLayout llParentHolder) {
    final LinearLayout llHolder = (LinearLayout) llParentHolder.findViewById(R.id.llHolder);
    AnimationSet aset = new AnimationSet(true);
    AlphaAnimation alpha = new AlphaAnimation(1, 0);
    alpha.setStartOffset(500);
    alpha.setDuration(1000);
    aset.addAnimation(alpha);
    alpha.setAnimationListener(new AnimationListener() {

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

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

        @Override
        public void onAnimationEnd(Animation animation) {
            llHolder.setVisibility(LinearLayout.GONE);
        }
    });
    llHolder.startAnimation(aset);
}

}

于 2013-03-11T08:44:45.147 回答
0

可能有人仍然遇到这个问题并且没有找到解决方案 - 即使阅读了很多 stackoverflow 答案 - 就像我一样!

所以我的情况是:我使用了 animatorSet 和

没有一个视图可以调用 clearAnimation,我没有从 backgroundThread 调用我的动画 - 你不应该那样做,顺便说一句 - 作为解决方案,我确实在 animatorSet.start( )

于 2016-03-31T06:47:50.980 回答