滑动删除listitem

我想实现一个滑动手势来删除类似于android通知的ListView行。

现在我所拥有的就是一个带有onTouchListenerListView – 也就是说,我已经有了一个轻扫检测工作。

 gestureDetector = new GestureDetector(this, new GestureListener()); onTouchListener = new TouchListener(); listview.setOnTouchListener(onTouchListener); 

我的GestureListener类:

 protected class GestureListener extends SimpleOnGestureListener { private static final int SWIPE_MIN_DISTANCE = 150; private static final int SWIPE_MAX_OFF_PATH = 100; private static final int SWIPE_THRESHOLD_VELOCITY = 100; private MotionEvent mLastOnDownEvent = null; @Override public boolean onDown(MotionEvent e) { mLastOnDownEvent = e; return super.onDown(e); } @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if(e1 == null){ e1 = mLastOnDownEvent; } if(e1==null || e2==null){ return false; } float dX = e2.getX() - e1.getX(); float dY = e1.getY() - e2.getY(); if (Math.abs(dY) < SWIPE_MAX_OFF_PATH && Math.abs(velocityX) >= SWIPE_THRESHOLD_VELOCITY && Math.abs(dX) >= SWIPE_MIN_DISTANCE ) { if (dX > 0) { Toast.makeText(getApplicationContext(), "Right Swipe", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), "Left Swipe", Toast.LENGTH_SHORT).show(); } return true; } else if (Math.abs(dX) < SWIPE_MAX_OFF_PATH && Math.abs(velocityY)>=SWIPE_THRESHOLD_VELOCITY && Math.abs(dY)>=SWIPE_MIN_DISTANCE ) { if (dY>0) { Toast.makeText(getApplicationContext(), "Up Swipe", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), "Down Swipe", Toast.LENGTH_SHORT).show(); } return true; } return false; } } 

我的TouchListener类:

 protected class TouchListener implements View.OnTouchListener { @Override public boolean onTouch(View v, MotionEvent e) { if (gestureDetector.onTouchEvent(e)){ return true; }else{ return false; } } } 

有没有一些教程/例子呢?

谢谢

Solutions Collecting From Web of "滑动删除listitem"

如果您的扫描检测工作正常,剩下的就是删除该项目。 为此,以下代码将删除屏幕外的项目。

 yourListViewAdapter.yourListItems.remove(position); yourListViewAdapter.notifyDataSetChanged(); 

您可以通过将此添加到您的滑动检测来达到很好的效果:

  //if swipe to left detected Display display = getWindowManager().getDefaultDisplay(); v.clearAnimation(); TranslateAnimation translateAnim = new TranslateAnimation(0, -display.getWidth(), 0, 0); translateAnim.setDuration(250); translateAnim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { yourListViewAdapter.yourListItems.remove(position); yourListViewAdapter.notifyDataSetChanged(); } }); v.startAnimation(translateAnim); 

我想我真的必须在列表中的每一行实现一个触摸监听器。 – >查找自定义的ArrayAdapter

至于扔项目,我发现了一个很好的教程,回答我的大部分问题: http : //mobile.tutsplus.com/tutorials/android/android-gesture/

在我search某种滑动侦听器时,我遇到了Roman Nurik的Swipe代码。 [1]: https : //github.com/romannurik/android-swipetodismiss

我一直在我的应用程序中使用它,它的作品就像一个魅力!

它的写法与实现的监听器相同,所以我发现它很容易处理。