最近项目要用到很多动画,涵盖item删除、listView item滑动、listView item替换等效果,在gitHub上找到了一个ListViewAnimation的开源项目,但是该项目要依赖一些jar和库,会导致项目过大,经过不懈地努力,在google找到了一个比较轻量级的listView item删除动画,现在给大家分享下,代码我就直接贴上了。
1 java代码
import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.ScaleAnimation; import android.view.animation.Transformation; import android.widget.ArrayAdapter; import android.widget.ImageButton; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { static final int ANIMATION_DURATION = 200; private static List<MyCell> mAnimList = new ArrayList<MyCell>(); private MyAnimListAdapter mMyAnimListAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for (int i=0;i<50;i++) { MyCell cell = new MyCell(); cell.name = "Cell No."+Integer.toString(i); mAnimList.add(cell); } mMyAnimListAdapter = new MyAnimListAdapter(this, R.layout.chain_cell, mAnimList); ListView myListView = (ListView) findViewById(R.id.chainListView); myListView.setAdapter(mMyAnimListAdapter); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } private void deleteCell(final View v, final int index) { AnimationListener al = new AnimationListener() { @Override public void onAnimationEnd(Animation arg0) { mAnimList.remove(index); ViewHolder vh = (ViewHolder)v.getTag(); vh.needInflate = true; mMyAnimListAdapter.notifyDataSetChanged(); } @Override public void onAnimationRepeat(Animation animation) {} @Override public void onAnimationStart(Animation animation) {} }; collapse(v, al); } private void collapse(final View v, AnimationListener al) { final int initialHeight = v.getMeasuredHeight(); Animation anim = new Animation() { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { if (interpolatedTime == 1) { v.setVisibility(View.GONE); } else { v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime); v.requestLayout(); } } @Override public boolean willChangeBounds() { return true; } }; if (al!=null) { anim.setAnimationListener(al); } anim.setDuration(ANIMATION_DURATION); v.startAnimation(anim); } private class MyCell { public String name; } private class ViewHolder { public boolean needInflate; public TextView text; ImageButton imageButton; } public class MyAnimListAdapter extends ArrayAdapter<MyCell> { private LayoutInflater mInflater; private int resId; public MyAnimListAdapter(Context context, int textViewResourceId, List<MyCell> objects) { super(context, textViewResourceId, objects); this.resId = textViewResourceId; this.mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public View getView(final int position, View convertView, ViewGroup parent) { final View view; ViewHolder vh; MyCell cell = (MyCell)getItem(position); if (convertView==null) { view = mInflater.inflate(R.layout.chain_cell, parent, false); setViewHolder(view); } else if (((ViewHolder)convertView.getTag()).needInflate) { view = mInflater.inflate(R.layout.chain_cell, parent, false); setViewHolder(view); } else { view = convertView; } vh = (ViewHolder)view.getTag(); vh.text.setText(cell.name); vh.imageButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { deleteCell(view, position); } }); return view; } private void setViewHolder(View view) { ViewHolder vh = new ViewHolder(); vh.text = (TextView)view.findViewById(R.id.cell_name_textview); vh.imageButton = (ImageButton) view.findViewById(R.id.cell_trash_button); vh.needInflate = false; view.setTag(vh); } } }
2 activity_main.xml配置:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ListView android:id="@+id/chainListView" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView> </RelativeLayout>
3 chain_cell.xml配置
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageButton android:id="@+id/cell_trash_button" android:layout_width="48dp" android:layout_height="48dp" android:src="@drawable/trash_can" android:scaleType="fitXY" /> <TextView android:id="@+id/cell_name_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|left" android:layout_marginLeft="16dp" android:layout_weight="1" android:text="cell name" /> </LinearLayout>
4 效果
相关推荐
本篇文章将深入探讨两种实现ListView item删除动画的方法:侧滑删除和折叠删除。 一、侧滑删除动画 1. 实现原理:侧滑删除是通过在ListView的每个item右侧扩展出一个可滑动的区域,用户向左滑动item时,显示出删除...
3. **优化动画性能**:在大型列表中,为了避免影响整体性能,删除动画应该只对可见的item进行。可以使用AbsListView的`smoothScrollToPositionFromTop()`方法确保动画完成后,ListView自动滚动到下一个可见的item。 ...
例如,当我们需要在Item插入或删除时添加滑动效果,可以使用 AnimationUtils.loadAnimation() 函数加载系统提供的动画资源,然后在Adapter的getView()方法中为新创建或更新的View应用这些动画。 2. 自定义动画: ...
listViewItem.startAnimation(animation); ``` 3. 在动画结束时,从数据源中移除该条目,并调用Adapter的`notifyDataSetChanged()`方法,以更新ListView的显示。这会触发ListView重新布局,使得下方的列表项自动上移...
滑动删除功能则是ListView的一个高级特性,它允许用户通过手势滑动列表中的单个item来执行删除操作,提高了用户的交互体验。下面将详细探讨如何在Android中实现ListView的滑动删除功能。 首先,实现滑动删除功能...
本篇将详细介绍如何实现ListView的滑动删除item的功能,并提供相关的编程技巧。 一、基本原理 滑动删除的核心在于监听ListView的滑动手势。当用户在ListView的Item上进行滑动操作时,我们需要捕捉这一手势并作出...
5. **更新Adapter数据**: 当用户确认删除某个Item后,需要更新Adapter的数据源,然后调用Adapter的notifyDataSetChanged()方法通知ListView数据已改变。同时,根据删除操作的状态,可能还需要更新其他Item的位置。 ...
侧滑删除是通过手势检测来实现的,当用户在ListView的item上向左或向右滑动时,该item会显示出一个删除按钮或者提示,用户点击后即可完成删除操作。这种设计大大提升了交互的便捷性。 实现侧滑删除通常分为以下几个...
总的来说,实现ListView中Item左滑显示删除按钮涉及多个步骤,包括自定义ListView、滑动布局设计、适配器逻辑以及动画效果的添加。使用第三方库可以简化这个过程,但自定义实现可以更好地满足特定需求。在实际开发中...
总的来说,实现"Listview左右滑动删除item"涉及到了Android手势检测、视图拖动、数据绑定、动画和UI交互等多个方面,需要开发者具备扎实的Android基础和良好的编程习惯。通过以上步骤,你可以为你的应用创建一个高效...
在滑动结束后,执行删除动画,如淡出、缩放等,然后从ListView中移除Item。 5. **监听回调** 在适配器中添加回调接口,以便在Item被删除时通知主Activity或其他组件。这样可以执行相应的业务逻辑,如更新数据库、...
综上所述,删除ListView中的Item并让下部Item依次往上移动,主要涉及数据集的操作、适配器的更新以及可能的视图复用和动画效果。在实际开发中,根据项目需求,你可能还需要考虑更多细节,如数据同步、性能优化等。
本文将深入探讨如何在ListView中实现加载动画以及滑动删除item的功能。 ### 1. ListView加载动画 加载动画是提升用户体验的一种有效方式,它可以让用户在等待内容加载时感受到互动和趣味性。在ListView中添加加载...
微信是许多人日常使用的社交应用,它的很多交互设计被广泛借鉴,其中包括ListView的Item右滑删除功能。这个功能可以提升用户在处理大量列表数据时的效率。下面将详细讲解如何实现ListView的Item右滑删除事件,并参考...
至此,我们已经实现了长按ListView item删除数据的基本功能。为了提高用户体验,通常还需要添加确认删除的提示对话框,或者在删除后更新列表视图。此外,还可以根据需求对Dialog的样式进行定制,例如修改背景、边框...
标题"listview横向滑动item删除item"和描述"listview横向滑动删除item,完整demo"表明我们要讨论的是如何为ListView添加一个自定义的功能,即在水平滑动时删除列表项。这个功能可以提高用户的交互体验,让用户更加...
为了增强用户体验和交互性,有时我们需要实现类似iOS中的Swipe to Delete功能,即左右滑动删除ListView中的Item。本教程将详细介绍如何使用Scroller来实现这一效果,并结合RemoveListener进行操作。 一、Scroller...
2. 同样,调用`notifyDataSetChanged()`让ListView知道数据已改变,它会自动删除对应的itemView。 四、流畅性优化 1. ViewHolder模式:为提高性能,使用ViewHolder缓存itemView的子视图,避免每次滚动时都去查找子...
在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。它允许用户通过垂直滚动查看多行数据项。...在实际项目中,可以根据需求进一步优化,比如添加动画效果,或者实现批量删除功能。
Android listview动画效果代码库,几乎包含了listview的所有动画效果,如 滑入滑出, 飞入飞出,选中列表项 点击删除后,下面的列表项会有向上push up的动画效果,以及仿iphone 滑动删除列表item项动画效果. 灵活应用该...