2012-04-24 103 views
1

我在使用ViewAnimator進行Android動畫時遇到了一些問題。Android動畫被延遲,第一個動畫未全長運行

這裏是我的代碼(是的,我知道我應該做的動畫本身是XML,但不是問題):

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    final ViewAnimator animator = (ViewAnimator)getActivity().findViewById(R.id.animator); 
    Button next = (Button)getActivity().findViewById(R.id.buttonNext); 
    Button back = (Button)getActivity().findViewById(R.id.buttonBack); 
    next.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      animator.setInAnimation(inFromBottomAnimation()); 
      animator.setOutAnimation(outToTopAnimation()); 
      animator.showNext(); 
     } 
    }); 
    back.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      animator.setInAnimation(inFromTopAnimation()); 
      animator.setOutAnimation(outToBottomAnimation()); 
      animator.showPrevious(); 
     } 
    }); 

} 

private Animation inFromBottomAnimation() { 

    Animation inFromBottom = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, 
    Animation.RELATIVE_TO_PARENT, +1.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
    ); 
    inFromBottom.setDuration(1000); 
    inFromBottom.setInterpolator(new AccelerateInterpolator()); 
    return inFromBottom; 
} 
private Animation outToTopAnimation() { 
    Animation outToTop = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, 
    Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, -1.0f 
    ); 
    outToTop.setDuration(1000); 
    outToTop.setInterpolator(new AccelerateInterpolator()); 
    return outToTop; 
} 

private Animation inFromTopAnimation() { 
    Animation inFromTop = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f, 
    Animation.RELATIVE_TO_PARENT, -1.0f, Animation.RELATIVE_TO_PARENT, 0.0f 
    ); 
    inFromTop.setDuration(1000); 
    inFromTop.setInterpolator(new AccelerateInterpolator()); 
    return inFromTop; 
} 
private Animation outToBottomAnimation() { 
    Animation outToBottom = new TranslateAnimation(
    Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, 0.0f,    
    Animation.RELATIVE_TO_PARENT, 0.0f, Animation.RELATIVE_TO_PARENT, +1.0f 
    ); 
    outToBottom.setDuration(1000); 
    outToBottom.setInterpolator(new AccelerateInterpolator()); 
    return outToBottom; 
} 

首先,動畫被延遲。在動畫開始之前,我必須等待半秒鐘。其次,在ViewAnimator中運行的第一個動畫根本無法運行(只是跳到下一個視圖 - 在第一個問題後等待半秒鐘),或者運行速度太快,無法察覺。

是否有任何解決方法/解決這些問題?

+0

你確定參數TranslateAnimation的順序是正確的嗎?你談論「左」和「右」,但非零三角洲似乎適用於Y值。 – 2012-04-25 03:18:14

+0

@勞倫斯D'Oliveiro啊哎呀,它是從左側和右側,我改變它從頂部和底部滑動之前 - 我忘了重命名它。 – 2012-04-25 07:09:45

回答

1

似乎是一個Android的問題。這個問題在Android 4.1上不太明顯。