2013-04-10 2 views
2

Так что это проблема.
Анимация при первом запуске не работает, я понятия не имею, почему.
Сначала я использовал xml для анимации, но в этом случае анимация работала только с первой попытки и никогда больше, поэтому я изменил и сделал все в Java-коде.
Но теперь он всегда работает, кроме первой попытки.

Должен прояснить, что мне нужно работать над версией 2.2 (froyo).Android Animation не работает при первом запуске

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); 
      } 
     } 
    }); 
} 
} 

Любые подсказки?

EDIT
Так что я изменил мой код, но теперь не работает.

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(); 
     } 
    }); 

ответ

0

Удалите строку ниже.

menu.setVisibility(View.GONE); 

Вместо того, чтобы видимость Унесенные здесь, добавьте AnimationListener к animation и в слушателе, onAnimationEnd(Animation animation) способ сделать вашу видимость просмотра Унесенные.

Это позаботится о том, чтобы изменить видимость вида GONE после завершения всей анимации.

+0

Oh well .. Изменен .. но не работает вообще. Есть идеи? [New code post] –

+0

Удалить строку menu.setVisibility (View.GONE); который находится вне слушателя. – Pavandroid

+0

Еще ничего. Не работает вообще! –

Смежные вопросы