王学岗ListView滑动删除
来源:互联网 发布:mac桌面 编辑:程序博客网 时间:2024/05/22 04:58
FilpperActivity
package com.example.filpperdeletelist;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.util.Log;import android.view.View;import android.view.animation.Animation;import android.view.animation.Animation.AnimationListener;import android.view.animation.TranslateAnimation;import com.example.filpperdeletelist.FilpperListvew.FilpperDeleteListener;public class FilpperActivity extends Activity { private FilpperListvew flipperListView; private MyAdapter adapter ; private List<String> items; private int width; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_filpper); DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); width = dm.widthPixels; flipperListView = (FilpperListvew) findViewById(R.id.filpperlistview); items = new ArrayList<String>(); for(int i=0;i<150;i++){ items.add("item---->"+i); } adapter = new MyAdapter(this, items); flipperListView.setAdapter(adapter); //自定义的接口 flipperListView.setFilpperDeleteListener(new FilpperDeleteListener() { @Override public void filpperDelete(float xPosition,float yPosition) { //listview中要有item,否则返回 if(flipperListView.getChildCount() == 0) return ; Log.i("zhang_xin", "xPosition:"+xPosition+",yPosition:"+yPosition); //根据坐标获得滑动删除的item的index final int index = flipperListView.pointToPosition((int)xPosition, (int)yPosition); //一下两步是获得该条目在屏幕显示中的相对位置,直接根据index删除会空指針异常。因为listview中的child只有当前在屏幕中显示的才不会为空 int firstVisiblePostion = flipperListView.getFirstVisiblePosition(); View view = flipperListView.getChildAt(index - firstVisiblePostion); TranslateAnimation tranAnimation = new TranslateAnimation(0,width,0,0); tranAnimation.setDuration(500); tranAnimation.setFillAfter(true); view.startAnimation(tranAnimation); //当动画播放完毕后,删除。否则不会出现动画效果(自己试验的)。 tranAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation animation) { //删除一个item items.remove(index); adapter.notifyDataSetChanged(); } }); } }); }}
FilpperListVew
package com.example.filpperdeletelist;import android.content.Context;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.widget.ListView;public class FilpperListvew extends ListView { private float myLastX = -1; private float myLastY = -1; private boolean delete = false; //自定义的滑动删除监听 private FilpperDeleteListener filpperDeleterListener; public FilpperListvew(Context context) { super(context); // TODO Auto-generated constructor stub } public FilpperListvew(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } @Override public boolean onTouchEvent(MotionEvent ev) { // TODO Auto-generated method stub switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // 获得第一个点的x坐标 myLastX = ev.getX(0); myLastY = ev.getY(0); break; case MotionEvent.ACTION_MOVE: // 得到最后一个点的坐标 float deltaX = ev.getX(ev.getPointerCount() - 1) - myLastX; float deltaY = Math.abs(ev.getY(ev.getPointerCount() - 1) - myLastY); // 可以滑动删除的条件:横向滑动大于100,竖直差小于50 if (deltaX > 100.0 && deltaY < 50) { delete = true; } break; case MotionEvent.ACTION_UP: if (delete && filpperDeleterListener != null) { filpperDeleterListener.filpperDelete(myLastX,myLastY); } reset(); break; } return super.onTouchEvent(ev); } public void reset(){ delete = false ; myLastX = -1 ; myLastY = -1 ; } public void setFilpperDeleteListener(FilpperDeleteListener f) {//设置滑动监听的关键代码 filpperDeleterListener = f; } //自定义的接口 public interface FilpperDeleteListener { public void filpperDelete(float xPosition,float yPosition); }}
MyAdapter
package com.example.filpperdeletelist;import java.util.List;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MyAdapter extends BaseAdapter { private List<String> list ; private Context context ; public MyAdapter(Context context,List<String> list){ this.context = context ; this.list = list; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return list.get(position); } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub convertView = LayoutInflater.from(context).inflate(R.layout.lv_item, null); TextView text = (TextView)convertView.findViewById(R.id.tv); text.setText(list.get(position)); return convertView; }}
activity_filpper
<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" android:background="#ADD8E6" tools:context=".FilpperActivity" > <com.example.filpperdeletelist.FilpperListvew android:id="@+id/filpperlistview" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="#00000000" android:listSelector="#ADD8E6"/></RelativeLayout>
lv_item
<?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="match_parent" android:background="#FFFFFF" android:padding="20dp" android:orientation="vertical" > <TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="match_parent" android:text="item...." android:textSize="20sp"/></LinearLayout>
0 0
- 王学岗ListView滑动删除
- 实现listView滑动删除
- ListView 滑动删除效果
- listview滑动删除
- listView滑动删除
- ListView的滑动删除
- Android ListView滑动删除
- android,listView, 滑动删除
- listview滑动删除
- listview滑动删除
- android listview滑动删除
- 手势滑动删除ListView
- listview的滑动删除
- Android ListView 滑动删除
- ListView仿微信滑动删除
- listview的滑动删除
- Android滑动删除ListView
- 滑动删除--自定义ListView
- 编写高质量java代码一
- union和union all 的区别
- 如何访问VirtualBox虚拟机中的服务器
- oracle 存储过程 如何获得 捕获异常的内容
- [转] 网卡超时实现机制 watchdog_timeo/ndo_tx_timeout
- 王学岗ListView滑动删除
- AVplayer实现播放本地和网络视频(Swift3.0)
- 使用handler实现无限循环
- Windows驱动开发的一些资源下载记录
- Stirng,Stringbuffer,Stringbuild的区别浅淡
- Static和内联函数
- java.lang.IllegalArgumentException: System memory 468189184 must be at least 4.718592E8
- 滤镜系列之(二) ffmpeg自带常用滤镜
- 自定义view画圆