2012-10-17 58 views
0

我正在嘗試使用TranslateAnimation爲按鈕的位置設置動畫。我已經在多個地方讀過,實際按鈕的移動方式和可繪製的方式是在動畫之後改變其佈局。我已經做了,但我碰到的兩個問題/解決方案:翻譯按鈕並使其保持不變

  1. 要麼我添加setFillAfter(真)。這是很好的,因爲drawable在動畫之後仍然存在,但是當佈局被改變時,drawable從應該在的位置偏移平移距離,而按鈕的空白框架現在應該是它的位置。

  2. 添加setFillAfter(false)。這樣做,然後在動畫工作之後設置佈局,但圖標會閃爍,我認爲這是動畫結束和新佈局參數刷新屏幕之間的延遲。我目前使用這個代碼,但閃光燈是不可接受的,所以我想找到一個解決方案來解決它。

這裏是目前我的代碼:

final View aniView = v; // v is some view 
TranslateAnimation ani = new TranslateAnimation(0, 
240 - v.getLeft() - v.getWidth()/2, 
0, 
240 - v.getTop() - v.getHeight()/2); 


ani.setDuration(500); 

ani.setFillAfter(false); 
ani.setAnimationListener(new AnimationListener() { 
public void onAnimationEnd(Animation a) { 
     aniView.setTag(new Boolean(true)); 
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(aniView.getWidth(), 
    aniView.getHeight()); 
    params.leftMargin = 240 - aniView.getWidth()/2; 
    params.topMargin = 240 - aniView.getHeight()/2; 

    aniView.setLayoutParams(params); 
} 
public void onAnimationStart(Animation a) {} 
public void onAnimationRepeat(Animation a) {} 
}); 
v.animationStart(ani); 

回答

3

我已經想通了,解決我自己的問題,並會張貼誰在同樣的問題就來了,任何人的代碼。基本上這個想法是事先設置佈局參數,並基本上顛倒動畫。這裏的想法:

TranslateAnimation ani = new TranslateAnimation(v.getLeft() + v.getWidth()/2 - 240 , 
       0, 
       v.getTop() + v.getHeight()/2 - 240, 
       0); 


     ani.setDuration(500); 
     ani.setFillAfter(true); 
     ani.setDuration(1000); 
     ani.setFillAfter(true); 
     ani.setAnimationListener(new AnimationListener() { 
      public void onAnimationEnd(Animation a) { 
       aniView.setTag(new Boolean(true)); 
      } 
      public void onAnimationStart(Animation a) {} 
      public void onAnimationRepeat(Animation a) {} 
     }); 

     RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(v.getWidth(), 
       v.getHeight()); 
     params.leftMargin = 240 - aniView.getWidth()/2; 
     params.topMargin = 240 - aniView.getHeight()/2; 

     v.setLayoutParams(params); 
     v.startAnimation(set); 
0

完成從皮特真棒答案,我不得不試圖動畫完全激活佈局(在動畫結束閃爍)同樣的問題,但我用view.translateX代替佈局Params ...這個解決方案也適用於我的情況。