做这个功能主要是项目需要:找了很多资料但是效果都不理想,后来就自己研究写了一个,拿出来共享给大家,贴上代码大家慢慢看看,还是比较容易懂的。
主要代码:
package com.zbq.widget; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import android.view.MotionEvent; import android.view.View; import android.widget.ListView; public class DelSlideListView extends ListView implements GestureDetector.OnGestureListener, View.OnTouchListener { private GestureDetector mDetector; private OnDeleteListioner mOnDeleteListioner; private int position; private float velocityX, velocityY; private ListViewonSingleTapUpListenner thisonSingleTapUpListenner; public DelSlideListView(Context context) { super(context); init(context); } public DelSlideListView(Context context, AttributeSet att) { super(context, att); init(context); } public void setDeleteListioner(OnDeleteListioner mOnDeleteListioner) { this.mOnDeleteListioner = mOnDeleteListioner; } public void setSingleTapUpListenner( ListViewonSingleTapUpListenner thisonSingleTapUpListenner) { this.thisonSingleTapUpListenner = thisonSingleTapUpListenner; } private int standard_touch_target_size = 0; private float mLastMotionX; public boolean deleteView = false; private ScrollLinerLayout mScrollLinerLayout; private boolean scroll = false; private int pointToPosition; private boolean listViewMoving; private boolean delAll = false; public boolean isLongPress = false; public boolean isDelAll() { return delAll; } public void setDelAll(boolean delAll) { this.delAll = delAll; } private void init(Context mContext) { mDetector = new GestureDetector(mContext, this); mDetector.setIsLongpressEnabled(false); standard_touch_target_size = (int) getResources().getDimension( R.dimen.delete_action_len); this.setOnTouchListener(this); } public boolean onDown(MotionEvent e) { if (thisonSingleTapUpListenner != null) { thisonSingleTapUpListenner.onSingleTapUp(); } mLastMotionX = e.getX(); pointToPosition = this.pointToPosition((int) e.getX(), (int) e.getY()); final int p = pointToPosition - this.getFirstVisiblePosition(); if (mScrollLinerLayout != null) { mScrollLinerLayout.onDown(); mScrollLinerLayout.setSingleTapUp(true); } if (deleteView && p != position) { deleteView = false; if (mScrollLinerLayout != null) { mScrollLinerLayout.snapToScreen(0); mScrollLinerLayout.setSingleTapUp(false); } position = p; scroll = false; return true; } isLongPress = false; position = p; scroll = false; listViewMoving = false; return false; } public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { this.velocityX = velocityX; this.velocityY = velocityY; return false; } public void onLongPress(MotionEvent e) { } public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if (listViewMoving && !scroll) { if (mScrollLinerLayout != null) mScrollLinerLayout.snapToScreen(0); return false; } else if (scroll) { if (mScrollLinerLayout != null) { int deltaX = (int) (mLastMotionX - e2.getX()); if (deleteView) { deltaX += standard_touch_target_size; } if (deltaX >= 0 && deltaX <= standard_touch_target_size) { mScrollLinerLayout.scrollBy( deltaX - mScrollLinerLayout.getScrollX(), 0); } } } else { if (Math.abs(distanceX) > Math.abs(distanceY)) { final int pointToPosition1 = this.pointToPosition( (int) e2.getX(), (int) e2.getY()); final int p1 = pointToPosition1 - this.getFirstVisiblePosition(); if (p1 == position && mOnDeleteListioner.isCandelete(p1)) { mScrollLinerLayout = (ScrollLinerLayout) this .getChildAt(p1); if (mScrollLinerLayout != null) { int deltaX = (int) (mLastMotionX - e2.getX()); if (deleteView) { deltaX += standard_touch_target_size; } if (deltaX >= 0 && deltaX <= standard_touch_target_size && Math.abs(distanceY) < 5) { isLongPress = true; scroll = true; listViewMoving = false; mScrollLinerLayout.setSingleTapUp(false); mScrollLinerLayout.scrollBy( (int) (e1.getX() - e2.getX()), 0); } } } } } if (scroll) { return true; } return false; } public void onShowPress(MotionEvent e) { } public boolean onSingleTapUp(MotionEvent e) { if (deleteView) { position = -1; deleteView = false; mScrollLinerLayout.snapToScreen(0); scroll = false; return true; } return false; } public void setScroll(boolean b) { listViewMoving = b; } @Override public boolean onTouchEvent(MotionEvent event) { if (scroll || deleteView) { return true; } return super.onTouchEvent(event); } @Override public boolean onTouch(View v, MotionEvent event) { if (isDelAll()) { return false; } else { if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { int deltaX2 = (int) (mLastMotionX - event.getX()); if (scroll) { if (!deleteView && deltaX2 >= standard_touch_target_size / 2) { mScrollLinerLayout .snapToScreen(standard_touch_target_size); position = pointToPosition - this.getFirstVisiblePosition(); deleteView = true; } else { position = -1; deleteView = false; mScrollLinerLayout.snapToScreen(0); } scroll = false; return true; }/* else if (Math.abs(velocityX) > Math.abs(velocityY) && deltaX2 < -80) { mOnDeleteListioner.onBack(); return false; }*/ } return mDetector.onTouchEvent(event); } } public void deleteItem() { position = -1; deleteView = false; scroll = false; if (mScrollLinerLayout != null) { mScrollLinerLayout.snapToScreen(0); } } }
相关推荐
Android 仿微信滑动删除效果demo源码,支持滑动出现删除按钮
Android 仿微信对话列表滑动删除效果
Android 仿微信 ListView 滑动删除等操作 与微信信息滑动效果类似。。
Android仿qq,微信 滑动删除功能
Android仿ios微信滑动删除、置顶的实现: 左划ListView的item,当前条目出现“删除”和“置顶”两个按钮,点击其他位置,按钮隐藏,点击“删除”,当前条目消失。点击“置顶”,当前条目显示在第一行
android 仿微信列表滑动出现删除,置顶效果 值得下载
Android 仿微信QQ listView滑动出现删除修改按钮,点击删除按钮弹底部对话框进行确认删除,代码简单明了 可直接加入项目中
仿微信所使用的滑动删除,基本达到了预期的效果。对网上现有的demo加以优化,再此表示感谢
仿微信对话列表滑动删除功能,在listview中可以滑动删除item
Android界面UI侧滑方面的源码实例,这个是仿微信好友列表的滑动删除功能,在此基础上增加了可定义 SlideListViewDelete的功能。运行后,在模拟器上拖动任意一个列表项向左滑,右侧会出现“删除”功能,是不是觉得很...
主要为大家详细介绍了Android高仿微信对话列表滑动删除效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
主要介绍了Android仿微信滑动弹出编辑、删除菜单效果、增加下拉刷新功能,感兴趣的小伙伴们可以参考一下
主要为大家详细介绍了Android仿微信对话列表滑动删除效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这次是列表滑动删除的第三波,仿微信的列表滑动删除。先上个效果图: 前面的文章里面说过开源框架SwipeListView的实现原理是每个列表item中包含上下两层view,普通状态下上层的view覆盖着下层的view,当用户滑...
主要为大家详细介绍了Android仿微信列表滑动删除,如何实现滑动列表SwipeListView,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了Android仿微信列表滑动删除之可滑动控件,具有一定的实用性和参考价值,感兴趣的小伙伴们可以参考一下这次是列表滑动删除.