2

これが問題です。
最初の実行時のアニメーションが機能しません。理由がわかりません。
最初はアニメーションにxmlを使っていましたが、そうするとアニメーションは最初の試行でしか機能せず、2回目は機能しなかったので、変更してすべてを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();
        }
    });
4

1 に答える 1

0

下の行を削除します。

menu.setVisibility(View.GONE);   

ここで GONE を可視化する代わりに、リスナーにメソッドを追加しAnimationListenerて、ビューを GONE に可視化します。animationonAnimationEnd(Animation animation)

これにより、アニメーション全体が完了した後、ビューの可視性が GONE に変更されます。

于 2013-04-10T09:02:41.477 に答える