我试图以一种方式显示列表视图元素,使其中的每一个都具有动画效果,然后变得可见,因此逐个动画并使用户可见。 但是当我实现动画时,它不是处理个别项目,而是处理整个列表视图:(
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater layoutInflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row =layoutInflater.inflate(R.layout.categories_row, parent, false);
tvCatName = (TextView) row.findViewById(R.id.tvCatName);
tvCatName.setText(Data.alCategoriesModels.get(position).catname);
row.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Toasts.pop(activity, "Category id : " + Data.alCategoriesModels.get(position).catID);
}
});
// row.setAnimation(animation);
row.startAnimation(animation);
return row;
}
如何在列表视图的每个元素上制作一个一个动画。我是扩展ArrayAdapter。
答案 0 :(得分:13)
您可以在android:layoutAnimation
上应用ListView
。
在anim
文件夹中创建动画XML文件。例如(slide_right_in.xml
):
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true"
android:duration="400"
android:fromXDelta="-100%"
android:toXDelta="0%"/>
使用根元素layoutAnimation
创建另一个动画XML文件:(my_layout_animation.xml
)
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:animation="@anim/slide_right_in"
android:delay="0.5"/>
将其应用于您想要的任何ViewGroup
。例如ListView
:
<ListView
android:layoutAnimation = "@anim/my_layout_animation"
... />
答案 1 :(得分:1)
在搞乱我自己的动画实现后,有一半时间工作了,我发现ListViewAnimations#ExpandableListItemAdapter正是我所需要的。
以下是Google Play上的API演示应用:ListViewAnimations
答案 2 :(得分:1)
这是 Android ListView animation 的教程
编辑:
我们的想法是在其中创建一个监听器和动画视图:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView,final View view, final int position,
long id) {
anim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationEnd(Animation animation) {
ItemDetail item = aAdpt.getItem(position);
aAdpt.remove(item);
}
});
view.startAnimation(anim);
}
});
答案 3 :(得分:0)
int delay=(position-list.getFirstVisiblePosition)*200;
if(delay<=200)
delay=200;
animation.setStartOffset(delay);