3

スプラッシュ スクリーンを使用して、Google マップの読み込みの遅延をカバーしようとしています (マップ v2 の場合)。

数秒後にフェードアウトし、スプラッシュ画面を非表示にするためにオーバーライドできる で を使用ImageViewしたいと考えています。FrameLayoutonAnimationEndImageView

遅延なくアニメーションを開始する場合、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、 を使用することを優先して削除しました。AnimationsetStartOffset(startOffset)

つまり、最初に使用した間隔でアニメーションの開始を遅らせただけですpostDelayedpostDelayedなぜアニメーションのリスナーを台無しにしたのか、私にはまだわかりません。

于 2013-02-01T08:32:44.007 に答える
0

私は LinearLayouts をネストしており、1 つは parentHolder で、もう 1 つは 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

私のように、まだこの問題を抱えていて、解決策が見つからない人がいるかもしれません。

私のケースは次のとおりです。私はanimatorSetを使用し、

clearAnimation を呼び出すことができる単一のビューはありませんでした。backgroundThread からアニメーションを呼び出していませんでした。 )

于 2016-03-31T06:47:50.980 に答える