如何将android布局动画仅应用于某个索引以上的子级?

如何将android布局动画仅应用于某个索引以上的子级?,android,listview,animation,android-listview,layout-animation,Android,Listview,Animation,Android Listview,Layout Animation,我有一个包含一系列注释的列表视图 当前,我使用布局动画在列表首次加载时从侧面滑入所有注释;这很好用 但是,我正在尝试找出如何仅将布局动画应用于特定点下方的列表项。假设我删除了列表中的一个项目:我希望它下面的所有项目都向上移动到已删除注释的旧位置 我试图找到一种通过子索引自定义动画延迟或插值器的方法,但没有找到任何适合此位置的方法。有没有一种方法可以使用自定义布局动画(例如扩展LayoutImationController)来实现这一点,或者我必须执行此低级别操作并分别为每个视图设置动画 有什么建

我有一个包含一系列注释的列表视图

当前,我使用布局动画在列表首次加载时从侧面滑入所有注释;这很好用

但是,我正在尝试找出如何仅将布局动画应用于特定点下方的列表项。假设我删除了列表中的一个项目:我希望它下面的所有项目都向上移动到已删除注释的旧位置

我试图找到一种通过子索引自定义动画延迟或插值器的方法,但没有找到任何适合此位置的方法。有没有一种方法可以使用自定义布局动画(例如扩展LayoutImationController)来实现这一点,或者我必须执行此低级别操作并分别为每个视图设置动画


有什么建议吗?

创建动画并在列表中调用它。之后,您可以使用适配器的
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);
}
public类MainActivity扩展了ListActivity实现了ListListener{
数组列表值;
阵列适配器;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
值=generateMockData(50);
适配器=新阵列适配器(
这是android.R.layout.simple_list_item_1,value);
setContentView(R.layout.activity_main);
getListView().setAdapter(适配器);
getListView().setOnItemClickListener(此);
}
专用ArrayList generateMockData(整数){
ArrayList结果=新建ArrayList();
for(int i=0;i
我遇到了一个非常类似的问题,并且能够通过一个简单的
视图
子类找到解决方案,该子类允许您使用布局动画控制器仅为指定的视图设置动画。请参阅此链接:


在布局xml中,尝试添加:

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

这将自动为listview中的插入和删除设置动画。
如果有名为anim_translate_left的自定义动画,请改用:

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


来源:

我会分别设置每个子视图的动画。简单的for循环,跨删除项下的所有子视图都可以。