Android动画在首次运行时不起作用

时间:2013-04-10 08:44:36

标签: android animation

所以这就是问题 第一次运行时的动画不起作用,我不知道为什么 起初我使用xml进行动画制作,但是这样动画只在第一次尝试时起作用而且再也没有,所以我改变并在java代码中创建所有内容。
但现在,除了第一次尝试外,它总是运行。

必须澄清我必须在2.2(froyo)版本上工作。

public class HomePage extends Activity {
protected View menu;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home_page_portrait);
    ImageButton plus = (ImageButton) findViewById(R.id.button1);
    menu = (View) findViewById(R.id.layoutmenu);
    plus.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //menu.clearAnimation();
            Animation animation = new TranslateAnimation(0,-menu.getWidth(),0,0);
            menu.clearAnimation();
            if(menu.isShown()) {
                animation.setDuration(500);
                animation.setFillAfter(true);
                menu.setAnimation(animation);
                menu.setVisibility(View.GONE);      
            }
            else {
                animation.reset();
                animation = new TranslateAnimation(-menu.getWidth(),0,0,0);
                animation.setDuration(500);
                animation.setFillAfter(true);
                menu.setVisibility(View.VISIBLE);
                menu.setAnimation(animation);
            }
        }
    });
}
}

任何线索?

修改
所以我改变了我的代码,但现在根本不起作用。

    public void onClick(View v) {
            //menu.clearAnimation();
            Animation animation;
            menu.clearAnimation();
            if(menu.isShown()) {
                //animation.reset();
                animation = new TranslateAnimation(0,-menu.getWidth(),0,0);
                animation.setDuration(500);
                animation.setFillAfter(true);
                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) {
                        // TODO Auto-generated method stub
                        menu.setVisibility(View.GONE);
                    }

                });
                menu.setAnimation(animation);
                menu.setVisibility(View.GONE);      
            }
            else {
                //animation.reset();
                animation = new TranslateAnimation(-menu.getWidth(),0,0,0);
                animation.setDuration(500);
                animation.setFillAfter(true);
                animation.setAnimationListener(new Animation.AnimationListener() {

                    @Override
                    public void onAnimationStart(Animation animation) {
                        // TODO Auto-generated method stub
                        menu.setVisibility(View.VISIBLE);
                    }

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

                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                        // TODO Auto-generated method stub
                        menu.setVisibility(View.VISIBLE);
                    }

                });
                menu.setAnimation(animation);
                //menu.setVisibility(View.VISIBLE);
            }
            animation.reset();
        }
    });

1 个答案:

答案 0 :(得分:0)

删除以下行。

menu.setVisibility(View.GONE);   

不是在此处显示GONE的可见性,而是将 AnimationListener 添加到 animation 并在侦听器onAnimationEnd(Animation animation)方法中添加让您的观看能见度为GONE。

在整个动画完成后,这将注意将视图的可见性更改为GONE。