2012-10-20 53 views
0

那麼,這是我的問題?我已經將它放在了滑出的位置,然後它會保持在那個位置,然後你應該可以再次點擊它並且它會滑回到原來的位置。Android動畫Bug不會讓我點擊動畫後向右移動

但是,我不得不點擊它的第一個位置。即使它被滑出。我想在動畫之後做出來,我可以在任何地方點擊它,將它滑出。

這裏是我的代碼

public void sideBar() 
    { 

     ImageView sidebar = (ImageView)findViewById(R.id.sidebar); 

     if(out == 0) 
     { 
     mSlideInRight = AnimationUtils.loadAnimation(this, R.anim.slide_in_right); 
     mSlideInRight.setFillAfter(true); 
     sidebar.startAnimation(mSlideInRight); 
     out= 1; 
     } 
     else if(out == 1) 
     { 
       mSlideInLeft = AnimationUtils.loadAnimation(this, R.anim.slide_in_left); 
       sidebar.startAnimation(mSlideInLeft); 
       out=0; 
     } 

    } 

,這是因爲當你點擊它的代碼

public void onClick(View v) { 
     ImageView sidebar = (ImageView)findViewById(R.id.sidebar); 
     ImageView popup = (ImageView)findViewById(R.id.popup); 
     ImageView popup2 = (ImageView)findViewById(R.id.popup2); 

     switch(v.getId()) 
     {   
      case R.id.sidebar: 
       sideBar(); 
      break; 
     } 

    } 

回答

0

動畫只會影響您的側邊欄ImageView的繪製,而不是它的實際位置。動畫完成後,您應該將側邊欄的佈局參數更新到您想要的位置。如果您希望位置在動畫運行完成後或完成後立即更新,您可以在AnimationListener中執行此操作,如果要在動畫啓動時發生位置更改,請立即致電startAnimation

mSlideInRight.setAnimationListener(new AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation anim) {}; 

    @Override 
    public void onAnimationRepeat(Animation anim) {}; 

    @Override 
    public void onAnimationEnd(Animation anim) { 
     RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(...); 
     // Set properties of layoutParams here 
     sidebar.setLayoutParams(layoutParams); 
    }; 
}); 

替換RelativeLayout與您的ImageView是孩子的任何佈局。

+0

你能舉個例子說明我該怎麼做? – Dalton

+0

我還是很困惑。你能不能更新它與我的代碼?你是什​​麼意思「無論你的ImageView是小孩的佈局」 – Dalton

+0

添加我運行startAnimation之前發佈的代碼。您的ImageView是XML中定義的某個佈局的孩子,或者是您的代碼中的其他地方。我建議給http://developer.android.com/guide/topics/ui/declaring-layout.html一個閱讀。 – tad