8

我目前有一個工作的Android程序,它以編程方式將視圖添加到LinearLayout。我希望這些觀點在動畫中找到,並且找不到任何好的資源來解決如何做到這一點。Android:LinearLayout addView動畫

難道有人指着我正確的方向嗎?

回答

-2

你可以使用ViewFlipper並從那裏設置動畫,你可以看看這個tutorial 。祝你好運。

7

這是一個非常古老的問題,但仍有趣:你可以使用屬性android:animateLayoutChanges="true"

例如:

<LinearLayout 

       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:animateLayoutChanges="true" 
       /> 
4

可以與Scenes and Transitions API完成。

框架給了我們三個Transition類型開箱:FadeSlideExplode,但你也可以創建過渡擴展Visibility類和壓倒一切適當的方法的自定義類型。

所以,有任何ViewGroup,我們可以這樣做:

viewGroup.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(final View v) { 
     Transition t = null; 
     if (i == 1) { 
      t = new Fade(); 
     } else if (i == 2) { 
      t = new Slide(Gravity.BOTTOM); 
     } else if (i == 3) { 
      t = TransitionInflater.from(v.getContext()) 
            .inflateTransition(R.transition.my_transition); 
     } 

     Button button = new Button(v.getContext()); 
     button.setText("My button " + i++); 

     TransitionManager.beginDelayedTransition(customLayout, t); 
     viewGroup.addView(button); 
    } 
}); 

my_transition.xml是以下幾點:

<?xml version="1.0" encoding="utf-8"?> 
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android" 
       android:duration="3000" 
       android:interpolator="@android:interpolator/fast_out_slow_in"> 

    <fade/> 
    <slide android:slideEdge="bottom"/> 

</transitionSet> 

我們會得到這樣的結果:

enter image description here

請注意,我們必須在對佈局進行任何更改之前執行TransitionManager.beginDelayedTransition()(即在調用addView()之前)。然後框架將照顧其餘的。

也有另一種超負荷TransitionManager.beginDelayedTransition(ViewGroup),在這裏你不需要指定要應用什麼確切的過渡,並且系統將執行AutoTransition動畫,基本上會褪色,改變動畫視圖的邊界。


更新總結從談話中的註釋框架的TransitionManager可從API 19,並從API 21完全支持

(說全我的意思是如Slide轉變可從API 21)。雖然有support package available,但它不支持所有功能。或者,您也可以移動到TransitionsEverywhere庫,該庫將所有內容都支持到Android 4.0。

+0

我想當我像這樣添加'for(int i = 0; i 2017-04-26 10:12:49

+0

在'for'循環之前放置'TransitionManager.beginDelayedTransition()'。 – azizbekian 2017-04-26 10:15:19

+0

我想添加my_transition.xml我得到** @ android:interpolator/fast_out_slow_in需要API level 21(當前最小值爲15)** on android:interpolator =「@ android:interpolator/fast_out_slow_in」 – 2017-04-26 10:20:16

1

嘗試

1.添加以線性佈局

linearLayout.addView(customView); 

2。添加slide_up.xmlres/anim文件夾

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:fillAfter="true"> 

    <translate 
    android:duration="500" 
    android:fromYDelta="100%" 
    android:toYDelta="0%" /> 
</set> 

應用動畫如果要動畫意見逐一添加視圖

Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up); 
customView.startAnimation(animation); 

之後,然後用以下行

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      linearLayout.addView(customView); 
      Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_up); 
      customView.startAnimation(animation); 
     } 
}, 500); 
+0

我想要一個一個的滑動,但是這個幻燈片全部都是customeview together.My'linearLayout.addView(customView);'添加循環 – 2017-04-28 04:58:06

+0

您可以添加延遲,我已經更新了答案。 – Pehlaj 2017-04-28 05:14:43

+0

我們可以通過正確使用Handler來實現 – Pehlaj 2017-04-28 05:15:05