2016-01-20 33 views
0

我有一個帶有背景位圖的LinearLayout。我使用動畫將2-3個圖像添加到此佈局。問題是:每次我添加圖像時,FIRST圖像動畫從左上角開始,對於在該動畫之後的其他每個圖像,它都可以正常工作。我正在努力尋找解決這個小煩人問題的日子。你有什麼建議嗎?在android中添加和動畫imageViews時出現奇怪的行爲

這裏我是GIF格式的問題,我提出:http://imgur.com/FCPgof1

我的動畫:`

<scale 
    android:duration="750" 
    android:fillAfter="false" 
    android:fromXScale="0" 
    android:fromYScale="0.0" 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toXScale="1.0" 
    android:toYScale="1.0" /> 

`

我的佈局:

<LinearLayout 
    android:id="@+id/layoutCompareUppoints" 
    android:layout_width="140dp" 
    android:layout_height="28dp" 
    android:background="@drawable/uppballsbgnew" > 
</LinearLayout> 

我的代碼: `私人void animUppointsBefore(){

if (k < Integer.valueOf(uppoints)) { 

     Animation a = AnimationUtils.loadAnimation(this, 
       R.anim.debug_grow_fast_animation); 


    ImageView upp = new ImageView(this); 
    upp.setImageResource(R.drawable.uppballlightnew); 
    upp.setAdjustViewBounds(true); 
    uppLayout.addView(upp); 
    upp.startAnimation(a); 
    a.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation a) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationRepeat(Animation a) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void onAnimationEnd(Animation a) { 
      // TODO Auto-generated method stub 

      k++; 
      animUppointsBefore(); 

     } 
    }); 

    } 

}` 
+1

如果您在Q – Tasos

+0

中添加代碼,我將添加我的動畫代碼。但是我想再次說,在我添加第一個圖像後,我的代碼對於每個圖像都正常工作。這使得它很難理解 –

+0

你有沒有嘗試過RelativeLayout?我知道的LinearLayout是不是免費的圖像操作非常友好 – Pooya

回答

0

您最有可能看到的問題是,在實際發生任何動畫之前,圖像會添加到佈局中。該圖像將開始全尺寸,縮小到0,然後長到1.

您想要做的是在添加它之前使其不可見,然後使其顯示在屏幕外。您可以執行幾種方法,通常的方法是將ImageView設置爲View#INVISIBLE,然後設置Animation#AnimationListener,將動畫開始時的視圖設置爲View#VISIBLE

如果可以,使用Animators更容易一些(支持庫中有一些庫不允許這樣做)。您可以在添加View之前將視圖的Alpha設置爲0,然後將其設置爲1作爲動畫的一部分。只需製作兩個ObjectAnimators,一個用於alpha,一個用於scale,然後將它們合併爲一個AnimatorSet

編輯:

爲了把最後的答案從評論到這裏。

而不是在動畫之前添加視圖,它可能有助於將已佈局的圖像視圖放置在佈局中但不可見。這樣,就不需要進行新的佈局和測量過程,這可能會將測量結果擰到支點上。

+0

感謝您詳細的解答!可惜這並不能幫助我解決這個問題。我做了什麼excatly在我的動畫是怎麼回事的GIF。如果妳把你的時間來看待它,我會非常感激。 http://imgur.com/FCPgof1 –

+0

哦,這很有趣。它看起來像軸心點是在0%,0%角落。我不知道什麼原因,在我的頭頂,但有一點你可以嘗試是保持所有奠定了圖像但不可見,這樣他們的總體佈局總是在那裏,不需要重新測量(當你添加視圖時會發生這種情況)。實際上,現在我已經考慮過了,主軸可能會計算爲0,0,因爲此時ImageView沒有寬度或高度。 – DeeV

+0

是的,這可能是我的問題的工作解決方案,雖然它有點令人沮喪,重寫基本上工作的代碼,除了那個愚蠢的第一個圖像:D但非常感謝,你花了你的時間,我想我會嘗試它的方式你提議。 –

相關問題