2016-04-22 60 views
0

我正在製作一個Splash Screen,我希望圖像視圖能夠像懸浮一樣不斷上升。數據庫在後臺加載時會發生這種情況(AsyncTask)。我嘗試過動畫視圖,但它只是在一個方向上,只有一次。我該如何做到這一點?預先感謝您:dAndroid視圖上的向上和向下動畫

+0

我編輯我的答案,並改變了代碼一點 –

+0

所有我需要做的是改變的時機,但它的工作原理正如我想要的那樣。非常感謝你! :D – Yeol

回答

1

我會做的是動畫的看法喜歡你在之前做過,在動畫結束時有一種無限循環:

//in onPreExecute do levitate(ivSplashLogo, 300, true) 
//in onPostExecute do levitate(ivSplashLogo, 300, false) 

public void levitate (final View movableView,final float Y,boolean animated){ 
    if(animated) { 
     final long yourDuration = 200; 
     final TimeInterpolator yourInterpolator = new DecelerateInterpolator(); 
     movableView.animate(). 
       translationYBy(Y). 
       setDuration(yourDuration). 
       setInterpolator(yourInterpolator). 
       setListener(new AnimatorListenerAdapter() { 
        @Override 
        public void onAnimationEnd(Animator animation) { 
         super.onAnimationEnd(animation); 
         levitate(movableView, -Y, true); 
        } 
       }); 
    } 
} 

我沒有試過尚未但是你可以給它一個去,並告訴我

+0

我不知道Interpolator的用途以及它與Duration有什麼不同。 – Yeol

+0

插值器是一種貝塞爾曲線,它將對動畫應用不同的效果。 [這裏](https://www.youtube.com/watch?v=OMOJxBe9KGg)是一個視頻,它會顯示各種插值器的結果。這裏是[文檔](http://developer.android.com/reference/android/view/animation/Interpolator.html),如果你想我看到 –

+0

。謝謝!即時通訊從OnProgressUpdate調用它,但它不移動:< – Yeol

1

下往上:

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="@android:integer/config_longAnimTime" 
    android:fromYDelta="100%p" 
    android:toYDelta="0%p" /> 

從上至下:

<?xml version="1.0" encoding="utf-8"?> 
<translate xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="@android:integer/config_longAnimTime" 
    android:fromYDelta="0%p" 
    android:toYDelta="100%p" /> 

代碼:

if (findViewById(R.id.llIncludeBottom).getVisibility() == View.VISIBLE) { 
        findViewById(R.id.llIncludeBottom).setVisibility(View.GONE); 
        findViewById(R.id.llIncludeBottom).setAnimation(
          AnimationUtils.loadAnimation(this, R.anim.top_bottom)); 
       } else { 
        findViewById(R.id.llIncludeBottom).setVisibility(View.VISIBLE); 
        findViewById(R.id.llIncludeBottom).setAnimation(
          AnimationUtils.loadAnimation(this, R.anim.bottom_top)); 
       }