android 实现Listview左右滑动删除Item
2013-11-19 15:47
411 查看
以下实现如下功能,当我们在某一项,向左或者向右滑动时候,可以在相应item,显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有一个简单动画。
具体代码如下:
MainActivity.javapackage com.hck.listviewdeleteitem; import java.util.ArrayList; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationUtils; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; public class MainActivity extends Activity { private ListView listView; //listview控件 private ArrayList contentStrings = new ArrayList(); //数据源 private ListViewAdpter adapter; //适配器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listView = (ListView) findViewById(R.id.list); initData(); //初始化数据 setListener(); //绑定事件 } private void initData() { contentStrings.add("第1项"); contentStrings.add("第2项"); contentStrings.add("第3项"); contentStrings.add("第4项"); contentStrings.add("第5项"); contentStrings.add("第6项"); contentStrings.add("第7项"); contentStrings.add("第8项"); contentStrings.add("第9项"); contentStrings.add("第10项"); contentStrings.add("第11项"); contentStrings.add("第12项"); contentStrings.add("第13项"); adapter=new ListViewAdpter(contentStrings, this); listView.setAdapter(adapter); } private void setListener() { listView.setOnItemClickListener(new OnItemClickListener() { //点击每项item时候执行 @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Toast.makeText(MainActivity.this, "点击事件,执行你的操作", Toast.LENGTH_SHORT).show(); } }); } }
代码比较简单
ListViewAdpter.java 数据绑定和相应的处理都在这里面了
package com.hck.listviewdeleteitem; import java.util.ArrayList; import android.content.Context; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.Animation.AnimationListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.TextView; public class ListViewAdpter extends BaseAdapter { public ArrayList data; //数据源 private Context context; private float downX; //点下时候获取的x坐标 private float upX; //手指离开时候的x坐标 private Button button; //用于执行删除的button private Animation animation; //删除时候的动画 private View view; public ListViewAdpter(ArrayList data, Context context) { this.data = data; this.context = context; animation=AnimationUtils.loadAnimation(context, R.anim.push_out); //用xml获取一个动画 } @Override public int getCount() { return data.size(); } @Override public Object getItem(int arg0) { return data.get(arg0); } @Override public long getItemId(int arg0) { return arg0; } @Override public View getView(final int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item, null); holder = new ViewHolder(); holder.textView = (TextView) convertView.findViewById(R.id.text); holder.button=(Button) convertView.findViewById(R.id.bt); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } convertView.setOnTouchListener(new OnTouchListener() { //为每个item设置setOnTouchListener事件 @Override public boolean onTouch(View v, MotionEvent event) { final ViewHolder holder = (ViewHolder) v.getTag(); //获取滑动时候相应的ViewHolder,以便获取button按钮 switch (event.getAction()) { case MotionEvent.ACTION_DOWN: //手指按下 downX = event.getX(); //获取手指x坐标 if (button != null) { button.setVisibility(View.GONE); //影藏显示出来的button } break; case MotionEvent.ACTION_UP: //手指离开 upX = event.getX(); //获取x坐标值 break; } if (holder.button != null) { if (Math.abs(downX - upX) > 35) { //2次坐标的绝对值如果大于35,就认为是左右滑动 holder.button.setVisibility(View.VISIBLE); //显示删除button button = holder.button; //赋值给全局button,一会儿用 view=v; //得到itemview,在上面加动画 return true; //终止事件 } return false; //释放事件,使onitemClick可以执行 } return false; } }); holder.button.setOnClickListener(new OnClickListener() { //为button绑定事件 @Override public void onClick(View v) { if (button != null) { button.setVisibility(View.GONE); //点击删除按钮后,影藏按钮 deleteItem(view, position); //删除数据,加动画 } } }); holder.textView.setText(data.get(position)); //显示数据 return convertView; } public void deleteItem(View view,final int position) { view.startAnimation(animation); //给view设置动画 animation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { //动画执行完毕 data.remove(position); //把数据源里面相应数据删除 notifyDataSetChanged(); } }); } static class ViewHolder { TextView textView; //显示数据的view Button button; //删除按钮 } }
相应地方都有注解,大家看看,就能明白了
完整代码:demo
本人网站,大家多多支持:蝌蚪手机赚钱
相关文章推荐
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- [置顶] Android之NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- [转]Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 高级UI设计笔记03:使用Scroller实现绚丽的ListView左右滑动删除Item效果(转载)
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- 【转】Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果
- Android 使用NineOldAndroids实现绚丽的ListView左右滑动删除Item效果
- Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果