14

我有一個包含一系列筆記的ListView。如何將android佈局動畫僅應用於特定索引以上的兒童?

當前我使用佈局動畫來在列表第一次加載時從側面滑動所有音符;這工作完美。

但是,我想弄清楚如何應用佈局動畫只列出某個點以下的項目。說我刪除列表中的一個項目:我希望它下面的所有項目移動到刪除的筆記的舊點。

我試過找到一種方法來自定義動畫延遲或內插器的子索引,但沒有找到適合此位置的任何內容。有沒有辦法做到這一點使用自定義佈局動畫(如擴展LayoutAnimationController),或者我必須做到這一點低層次和動畫每個視圖單獨?

有什麼建議嗎?

+0

我會單獨動畫每個子視圖。簡單的循環,跨過被刪除項目下的所有孩子都可以工作。 – 2012-09-23 00:10:22

回答

1

創建您的動畫並將其稱爲您的列表OnItemClickListener。之後,您可以使用適配器的notifyDataSetChanged刷新列表內容。

在本例中,我創建了一個名爲removeListItem的方法,接收要刪除的行以及該列中位置列出的內容數組。

public class MainActivity extends ListActivity implements OnItemClickListener{ 

ArrayList<String> values; 
ArrayAdapter<String> adapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    values = generateMockData(50); 

    adapter = new ArrayAdapter<String>(
      this, android.R.layout.simple_list_item_1, values); 

    setContentView(R.layout.activity_main); 

    getListView().setAdapter(adapter); 
    getListView().setOnItemClickListener(this); 
} 

private ArrayList<String> generateMockData(int number) { 

    ArrayList<String> result = new ArrayList<String>(); 

    for(int i = 0; i < number; i++) 
     result.add(""+i+" "+ (int)Math.random() * 13); 

    return result; 
} 

private void removeListItem(View rowView, final int positon) { 

    Animation anim = AnimationUtils.loadAnimation(this, 
      android.R.anim.slide_out_right); 
    anim.setDuration(500); 
    rowView.startAnimation(anim); 

    new Handler().postDelayed(new Runnable() { 

     public void run() { 

      values.remove(positon);//remove the current content from the array 

      adapter.notifyDataSetChanged();//refresh you list 

     } 

    }, anim.getDuration()); 

} 

public void onItemClick(AdapterView<?> arg0, View row, int position, long arg3) { 

     if(position == YOUR_INDEX) //apply your conditions here! 
      removeListItem(row,position); 
} 
0

在你的佈局XML,試着加入:

<ListView 
    android:id="@android:id/list" 
    ... 
    android:animateLayoutChanges="true"/> 

這會自動從你的列表視圖動畫的插入和缺失。
如果你有一個自定義動畫,名爲anim_translate_left,使用代替:

<ListView 
    android:id="@android:id/list" 
    ... 
    android:animateLayoutChanges="@anim/anim_translate_left"/> 

來源:Google API's