这次交大家使用listview的右滑删除,其实也非常简单,
首先需要自定义listview,具体代码如下:

package com.example.myapp;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.VelocityTracker;import android.view.View;import android.view.ViewConfiguration;import android.view.WindowManager;import android.widget.AdapterView;import android.widget.ListView;import android.widget.Scroller;public class SlideListView extends ListView {    private int slidePosition;    private int downY;    private int downX;    private int screenWidth;    private View itemView;    private Scroller scroller;    private static final int SNAP_VELOCITY = 600;    private VelocityTracker velocityTracker;    private boolean isSlide = false;    private int mTouchSlop;    private RemoveListener mRemoveListener;    private boolean isRemove = false;    private RemoveDirection removeDirection;    public enum RemoveDirection {        RIGHT, LEFT, NONE;    }    public SlideListView(Context context) {        this(context, null);    }    public SlideListView(Context context, AttributeSet attrs) {        this(context, attrs, 0);    }    public SlideListView(Context context, AttributeSet attrs, int defStyle) {        super(context, attrs, defStyle);        screenWidth = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth();        scroller = new Scroller(context);        mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();    }    public void setRemoveListener(RemoveListener removeListener) {        this.mRemoveListener = removeListener;    }    @Override    public boolean dispatchTouchEvent(MotionEvent event) {        switch (event.getAction()) {        case MotionEvent.ACTION_DOWN: {            addVelocityTracker(event);            if (!scroller.isFinished()) {                return false;            }            downX = (int) event.getX();            downY = (int) event.getY();            slidePosition = pointToPosition(downX, downY);            if (slidePosition == AdapterView.INVALID_POSITION) {                return super.dispatchTouchEvent(event);            }            itemView = getChildAt(slidePosition - getFirstVisiblePosition());            break;        }        case MotionEvent.ACTION_MOVE: {            if (Math.abs(getScrollVelocity()) > SNAP_VELOCITY                    || (Math.abs(event.getX() - downX) > mTouchSlop && Math                            .abs(event.getY() - downY) < mTouchSlop)) {                isSlide = true;            }            break;        }        case MotionEvent.ACTION_UP:            recycleVelocityTracker();            break;        }        return super.dispatchTouchEvent(event);    }    private void scrollRight() {        removeDirection = RemoveDirection.RIGHT;        final int delta = (screenWidth + itemView.getScrollX());                scroller.startScroll(itemView.getScrollX(), 0, -delta, 0,                Math.abs(delta));        postInvalidate();    }    private void scrollLeft() {        removeDirection = RemoveDirection.LEFT;        final int delta = (screenWidth - itemView.getScrollX());        scroller.startScroll(itemView.getScrollX(), 0, delta, 0,                Math.abs(delta));        postInvalidate();    }    private void scrollBack(){        removeDirection = RemoveDirection.NONE;        scroller.startScroll(itemView.getScrollX(), 0, -itemView.getScrollX(), 0,                Math.abs(itemView.getScrollX()));        postInvalidate();    }    private void scrollByDistanceX() {        if (itemView.getScrollX() >= screenWidth / 2) {            scrollLeft();        } else if (itemView.getScrollX() <= -screenWidth / 2) {            scrollRight();        } else {            scrollBack();        }    }    @Override    public boolean onTouchEvent(MotionEvent ev) {        if (isSlide && slidePosition != AdapterView.INVALID_POSITION) {            requestDisallowInterceptTouchEvent(true);            addVelocityTracker(ev);            final int action = ev.getAction();            int x = (int) ev.getX();            switch (action) {            case MotionEvent.ACTION_DOWN:                System.out.println("touch-->" + "down");                break;            case MotionEvent.ACTION_MOVE:                System.out.println("touch-->" + "move");                MotionEvent cancelEvent = MotionEvent.obtain(ev);                cancelEvent.setAction(MotionEvent.ACTION_CANCEL |                           (ev.getActionIndex()<< MotionEvent.ACTION_POINTER_INDEX_SHIFT));                onTouchEvent(cancelEvent);                int deltaX = downX - x;                itemView.scrollTo(deltaX, 0);                itemView.setAlpha(1f - Math.abs((float)deltaX/screenWidth));                return true;            case MotionEvent.ACTION_UP:                isSlide = false;                int velocityX = getScrollVelocity();                if (velocityX > SNAP_VELOCITY) {                    scrollRight();                } else if (velocityX < -SNAP_VELOCITY) {                    scrollLeft();                } else {                    scrollByDistanceX();                }                recycleVelocityTracker();                break;            }        }        return super.onTouchEvent(ev);    }    @Override    public void computeScroll() {        if (scroller.computeScrollOffset()) {            itemView.scrollTo(scroller.getCurrX(), scroller.getCurrY());            itemView.setAlpha(1f - Math.abs((float)scroller.getCurrX()/screenWidth));            postInvalidate();            if (scroller.isFinished() && removeDirection != RemoveDirection.NONE) {                if (mRemoveListener == null) {                    throw new NullPointerException("RemoveListener is null, we should called setRemoveListener()");                }                itemView.scrollTo(0, 0);                itemView.setAlpha(1f);                mRemoveListener.removeItem(removeDirection, slidePosition);            }        }    }    private void addVelocityTracker(MotionEvent event) {        if (velocityTracker == null) {            velocityTracker = VelocityTracker.obtain();        }        velocityTracker.addMovement(event);    }    private void recycleVelocityTracker() {        if (velocityTracker != null) {            velocityTracker.recycle();            velocityTracker = null;        }    }    private int getScrollVelocity() {        velocityTracker.computeCurrentVelocity(1000);        int velocity = (int) velocityTracker.getXVelocity();        return velocity;    }    public interface RemoveListener {        public void removeItem(RemoveDirection direction, int position);    }}

然后使用SlideListView .setRemoveListener listview的这个方法就可以实现listview的右滑删除了。

更多相关文章

  1. Android判断横屏竖屏代码
  2. 代码中如何设置TextView为不可见
  3. Android AlertDialog的基本使用方法
  4. Android之设置横、竖屏方法
  5. android截屏代码:C++实现
  6. Android 异步任务加载图片代码

随机推荐

  1. 基于Android Volley的网络请求工具
  2. 关于android WebViewClient和WebChromeCl
  3. Android wakeLock 分析
  4. Android(安卓)使用OpenSSL进行3DES加密 c
  5. 关于android内核移植到YLP2440开发板
  6. android:showAsAction="never"是做什么用的
  7. android 自定义对话框
  8. Android小趣
  9. Android 移动端网络优化 (四)
  10. Android 去掉 ImageButton 的白色背景边