Android listview 右滑删除
来源:互联网 发布:冒险岛钻机的通讯数据 编辑:程序博客网 时间:2024/05/22 02:19
这次交大家使用listview的右滑删除,其实也非常简单,
然后使用SlideListView .setRemoveListener listview的这个方法就可以实现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的右滑删除了。
阅读全文
0 0
- Android listview 右滑删除
- android listview 右滑删除(android 项目心得五)
- Android SwipeToDismiss:左滑/右滑删除ListView条目Item
- Android SwipeToDismiss:左滑/右滑删除ListView条目Item
- Android 第三方开源SwipeToDismiss:左滑/右滑删除ListView条目Item
- 自己实现一个右滑删除的ListView, SwipeMenuListView
- Android通话记录ListView实现左滑发短信和右滑打电话
- UITableView右滑删除
- android 堆栈卡片,左滑添加右滑删除
- HorizontalScrollView实现右滑菜单与ListView左滑删除冲突解决(事件分发顺序)
- Android 自定义ListView Item侧滑删除
- android ListView的item侧滑删除
- Android 模仿QQ侧滑删除ListView
- Android ListView滑动删除
- android,listView, 滑动删除
- android listview滑动删除
- Android ListView 滑动删除
- Android滑动删除ListView
- LocalBroadcastManager 的使用和源码分析
- Hibernate中Inverse和cascade的区别
- 04_BootScrap——CRUD(动态页面上篇)
- 《珠珠图案》创意——发挥聪明才智,灵活应用软件,创造性扩展。
- 人脸识别趟坑历程
- Android listview 右滑删除
- A simple java application.
- 150. Evaluate Reverse Polish Notation
- 人脸识别(face recognition)
- 2015湖南省赛 CSU 1777 : 大还是小? (水)
- Using RequireJS in AngularJS Applications
- 通过简单示例来理解什么是机器学习
- xUtils
- N!