2016-09-29 104 views
1

我正在創建倒計時應用。我完成了所有的代碼和它的所有工作很好,但我是新的android動畫。我需要在動畫下應用我的應用程序。我嘗試使用幻燈片進/出,但它不工作好我也嘗試了其他幾個動畫,但沒有什麼是相同的動畫下面比較。倒計時應用動畫

一次播放按鈕,按下啓動一個定時器,然後再次按下暫停按鈕來和下我們有目前倒數時間暫停圖標textView。如果再次按計數開始。我只是在尋找所有其他代碼我已經完成的動畫。 我有一個ImageButton它顯示圖標每個計時器用戶按播放/暫停和TextView它顯示倒數計時器和另一個TextView它顯示當前計時器當用戶按下暫停按鈕。是否有無論如何我可以實現這個動畫應用程序?

所以當我是新來的Android動畫任何幫助將撥付。謝謝!

這裏是XML:

<FrameLayout 
     android:layout_width="228dp" 
     android:layout_height="228dp" 
     android:layout_marginTop="7dp" 
     android:layout_marginLeft="7dp" 
     android:layout_marginRight="8dp" 
     android:layout_marginBottom="8dp" 
     android:id="@+id/circlea" 
     android:visibility="visible" 

     android:background="@drawable/circle"> 

<ImageButton 
    android:layout_width="142dp" 
    android:layout_height="142dp" 
    android:layout_marginTop="43dp" 
    android:layout_marginBottom="43dp" 
    android:layout_marginLeft="43dp" 
    android:id="@+id/play" 
    android:background="#000" 
    android:layout_marginRight="43dp" 
    android:src="@mipmap/icon" 
    android:visibility="visible" /> 
     <TextView 
      android:layout_width="134dp" 
      android:layout_height="73dp" 
      android:text="" 
      android:textColor="#FFFFFF" 
      android:textSize="55sp" 
      android:layout_marginTop="78dp" 
      android:layout_marginStart="48dp" 
      android:id="@+id/countText" 
      android:fontFamily="sans-serif-light" 
      android:background="#000" 
      android:visibility="invisible" /> 
     <TextView 
      android:layout_marginTop="180dp" 
      android:layout_marginLeft="90dp" 
      android:text="" 
      android:id="@+id/pusetext" 
      android:textSize="24sp" 
      android:textColor="#1EFFFFFF" 
      android:layout_width="61dp" 
      android:layout_height="32dp" /> 

    </FrameLayout> 

的java:

//some code 
super.onCreate(savedInstanceState); 
play=(ImageButton)findViewById(R.id.play); 
pausetext=(TextView) findViewById(R.id.pusetext); 
CountText=(TextView)findViewById(R.id.countText); 
play.OnClickListener startListener = new View.OnClickListener() {//first public void onClick(View v){ 
play.setVisibility(View.INVISIBLE); 
CountText.setVisibility(View.VISIBLE); 

ObjectAnimator slideDownAnimTextView = ObjectAnimator.ofFloat(CountText, "translationY", -(CountText.getTop() + CountText.getHeight()), 0); 
      slideDownAnimTextView.start(); 
} 
CountText.setOnClickListener 
public void onClick(View v){//pause click 
play.setVisibility(View.VISIBLE); 
ObjectAnimator slideDownAnimPlayButton = ObjectAnimator.ofFloat(play, "translationY", -(play.getTop() + play.getHeight()), 0); 

      ObjectAnimator scaleDownAnimTextViewX = ObjectAnimator.ofFloat(CountText, "scaleX", 1f, 0.5f); 
      ObjectAnimator scaleDownAnimTextViewY = ObjectAnimator.ofFloat(CountText, "scaleY", 1f, 0.5f); 
      AnimatorSet animatorSet = new AnimatorSet(); 
      animatorSet.setDuration(1000); 
      animatorSet.playTogether(slideDownAnimPlayButton,scaleDownAnimTextViewX,scaleDownAnimTextViewY); 
      animatorSet.start(); 
} 
play.setOnClickListener 
public void onClick(View view) {resume click 
play.setVisibility(View.INVISIBLE); 
      CountText.setVisibility(View.VISIBLE); 
} 
CountText.setOnClickListener(new View.OnClickListener() //pause click agine 
       @Override 
       public void onClick(View view) { 

//some code 

回答

2

可以使用HTextView庫來實現動畫(顯示文本)的第一部分。 然後,使用ObjectAnimator s向下滑動和縮放文本,並向下滑動播放按鈕(使用AnimatorSet將它們一起播放)。

下面是一個示例代碼(你應該,當然,根據您的需要更改值) -

ObjectAnimator slideDownAnimPlayButton = ObjectAnimator.ofFloat(play, "translationY", -(CountText.getTop()), 0); 
ObjectAnimator slideDownAnimTextView = ObjectAnimator.ofFloat(CountText, "translationY",0, (CountText.getTop())); 
ObjectAnimator scaleDownAnimTextViewX = ObjectAnimator.ofFloat(CountText, "scaleX", 1f, 0.5f); 
ObjectAnimator scaleDownAnimTextViewY = ObjectAnimator.ofFloat(CountText, "scaleY", 1f, 0.5f); 
AnimatorSet animatorSet = new AnimatorSet(); 
animatorSet.setDuration(1000); 
animatorSet.playTogether(slideDownAnimPlayButton,slideDownAnimTextView,scaleDownAnimTextViewX,scaleDownAnimTextViewY); 
animatorSet.start(); 

編輯:現在看到你的新代碼,第一個文字動畫的問題是,你打電話它從onCreate(),所以視圖尚未繪製,這意味着他沒有有效的高度或頂部參數。 您可以通過稍微延遲動畫或使用ViewTreeObserver來解決此問題。請參見下面的例子 -

開始動畫與延遲 -

new Handler().postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     ObjectAnimator slideDownAnimTextView = ObjectAnimator.ofFloat(CountText, "translationY", -(CountText.getTop() + CountText.getHeight()), 0); 
     slideDownAnimTextView.start(); 
    } 
}, 300); 

或者,也許是更好的方法,使用ViewTreeObserver -

CountText.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     CountText.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
     ObjectAnimator slideDownAnimTextView = ObjectAnimator.ofFloat(CountText, "translationY", -(CountText.getTop() + CountText.getHeight()), 0); 
     slideDownAnimTextView.start(); 
    } 
}); 
+0

編輯GIF請看看。謝謝 –

+0

現在有點不清楚,但看起來你只需要扭轉動畫的第二部分。我建議使用'objectAnimtor.reverse()'。 – Tofira

+0

什麼屬性我可以用來縮放一個TextView與objectAnimtor下滑動畫?一個代碼是非常有用的。謝謝 –