2012-06-08 35 views
3

我通過這段代碼運動的看法,但setfillafter(真)後不改變實際的視位置沒有改變,爲什麼來看實際位置在機器人動畫

   TranslateAnimation ta = new TranslateAnimation(0, 0, Animation.RELATIVE_TO_SELF, -mbar4.getHeight()); 
       ta.setDuration(1000); 
       ta.setFillAfter(true); 
       v4.startAnimation(ta); 

回答

0

因爲TranslateAnimation只改變其中查看繪製。

試試這個:

TranslateAnimation ta = new TranslateAnimation(0, 0, Animation.RELATIVE_TO_SELF, -mbar4.getHeight()); 
    ta.setDuration(1000); 
    ta.setFillAfter(true); 
    ta.setAnimationListener(new AnimationListener() { 

     public void onAnimationStart(Animation animation) {} 

     public void onAnimationRepeat(Animation animation) {} 

     public void onAnimationEnd(Animation animation) { 
      ((RelativeLayout.LayoutParams)v4.getLayoutParams()).bottomMargin = mbar4.getHeight(); 
      v4.requestLayou(); 
     } 
    }); 
    v4.startAnimation(ta); 

變化RelativeLayout.LayoutParams到任何父佈局是。

3

直到android排除的版本3(API 11),所有動畫並不真正改變視圖,只是顯示它的方式。不僅如此,我認爲他們根本不使用GPU。

爲了檢查出來,你可以使用一個按鈕和setOnClickListener來查看它,並且看到不管你使用哪個動畫,該點擊只能在其原始位置和大小上工作。

這裏使用translateAnimation移動視圖的示例代碼:

final int deltaXToMove=50; 
TranslateAnimation translateAnimation=new TranslateAnimation(0,deltaXToMove,0,0); 
int animationTime=1000; 
translateAnimation.setDuration(animationTime); 
translateAnimation.setFillEnabled(true); 
translateAnimation.setFillAfter(true); 
final Button b=(Button)findViewById(R.id.button); 
translateAnimation.setAnimationListener(new AnimationListener() 
    { 
    @Override 
    public void onAnimationEnd(Animation animation) 
    { 
    animation.setFillAfter(false); 
    FrameLayout.LayoutParams par=(LayoutParams)b.getLayoutParams(); 
    par.leftMargin=deltaXToMove; 
    b.setLayoutParams(par); 
    } 
... 
b.startAnimation(translateAnimation); 
+0

是的,你是對的。實際的位置沒有改變,我不知道當時setfillafter的用法是什麼。 – Programmer

+0

在我看來,整個動畫功能達到android 3(不包括)是非常奇怪的,幾乎沒用。它只適用於簡單的事情,例如過渡和來去的項目的動畫(例如,到listView)。 –

+0

上面的一個不工作...請參閱這個視頻其基本問題,我面臨的是,列表視圖向上移動,但是當我滾動以前的視圖的痕跡過來。 http://www.youtube.com/watch?v=XcKpJu8zWe8&feature=relmfu – Programmer