最近项目要用到很多动画,涵盖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中的button 点击删除item,可以有动画感,这里提供了两种方式:1 、侧滑,2、折叠
android删除listview item(动画删除)
ListView 加载动画及 滑动删除item
Android listview动画效果代码库,几乎包含了listview的所有动画效果,如 滑入滑出, 飞入飞出,选中列表项 点击删除后,下面的列表项会有向上push up的动画效果,以及仿iphone 滑动删除列表item项动画效果. 灵活应用该...
删除item加了动画效果后,最后一个item会闪烁,干脆在adapter里面...滑动删除item本质上并没有真正把item删除,只是用valueAnimator不断的更新marginTop的值,动画结束后快速把item放回原来的位置。水平有限,仅供参考!
ParticleLayout左滑粒子效果,滑动删除某条item的有没,自定义ParticleLayout然后对其设置 监听setDeleteListener,提供onDelete()方法,自定义view的onTouchEvent()当滑动的时候对 view做一些动画处理效果。
listview的item侧滑删除,附带删除动画
Android中ListView 左滑出现删除按钮,点击按钮删除ListView的item条目.出现删除按钮还有动画效果,点击删除按钮消失时也有动画
实现android listview item的上下拖动动画效果,并支持删除item数据
在QQ群里,很多朋友问如何实现android4.0的通知栏里面的listview滑动删除一个item的效果,我这里简单实现了一下,看图吧(一图胜千言)。 代码文章详情:http://blog.csdn.net/michael_yy/article/details/8031808
#ListViewItemDeleteAnimation###ListView的item删除动画,支持多条,单条删除###预览效果:###使用方法:使用FlingDismissListener和MyListViewWrapper将ListView包装起来,然后使用FlingDismissListener操作item的消失...
ListView中item向左滑动显示“删除”按钮,并删除该项;向右滑动将“删除”按钮隐藏;左右滑动时添加了动画效果。
安卓多item抽屉动画效果,支持动态添加删除动画。 先看效果: 本文CSDN博客 http://blog.csdn.net/AndroidMsky/article/details/53083634 先解释一下标题不然被说成标题党可不好,为什么是超轻量,因为我知道用...
通过RecycerView实现ListView效果,可以滑动item删除item,还可以删除增加item,删除增加伴随着动画特效,还支持item扩展。希望对你有帮助,不懂得地方可以私信博主。
包括卡片式列表(效果图1),Grid View列表(效果图2),列表item逐个淡入显示(效果图3),拖动列表item重新排序(效果图4),滑动删除列表item(效果图5),批量删除列表item(效果图6),展开列表item(效果图7)...
自定义的listview来做的,本来的思路是自定义item的根布局来做,结果出来之后,事件的分发处理,特别不好弄,各种不流畅。于是改用自定义listview,结果很喜人,个人觉得比较完美,支持3.0以下, 由于是属性动画需要...
包括卡片式列表,Grid View列表,列表item逐个淡入显示,拖动列表item重新排序(,滑动删除列表item,批量删除列表item,展开列表item等等。 GIT地址https://github.com/nhaarman/ListViewAnimations
[四次元]listview 的各种动画效果.rar [四次元]listview 适配器 优化 重用.rar [四次元]ListView+CheckBox UI 完美版。实现 全选 、 全不选 、 删除等功能.rar [四次元]ListView停止滚动开启下载图片.zip [四次元]...
点击listview2,获取到view ,设置一个动画,移动到listview1 ,listview2中删除被点的item。listview1中新增一个。 上代码: Mainactivity.java 部分 package com.example.testlistanimator; imp
实现各种列表动画效果。包括卡片式列表,Grid View列表,列表item逐个淡入显示,拖动列表item重新排序,滑动删除列表item,批量删除列表item,展开列表item等等。