Android 仿微信滑动删除
做这个功能主要是项目需要:找了很多资料但是效果都不理想,后来就自己研究写了一个,拿出来共享给大家,贴上代码大家慢慢看看,还是比较容易懂的。


主要代码:
- 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);
- }
- }
- }
- DeleteSlide.zip (1.5 MB)
- 下载次数: 451
Android 仿微信滑动删除的更多相关文章
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
仿照微信,朋友圈分享图片功能 .可以进行图片的多张选择,拍照添加图片,以及进行图片的预览,预览时可以进行缩放,并且可以删除选中状态的图片 .很不错的源码,大家有需要可以下载看看 . 微信 微信 微信 ...
- Android 仿微信小视频录制
Android 仿微信小视频录制 WechatShortVideo和WechatShortVideo文章
- [转]ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子
转载:http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除 ...
- android仿微信红包动画、Kotlin综合应用、Xposed模块、炫酷下拉视觉、UC浏览器滑动动画等源码
Android精选源码 仿微信打开红包旋转动画 使用Kotlin编写的Android应用,内容你想象不到 Android手机上的免Root Android系统日志Viewer 一个能让微信 Mater ...
- Android 仿微信朋友圈发表图片拖拽和删除功能
朋友圈实现原理 我们使用 Android Device Monitor 来分析朋友圈发布图片的界面实现原理.如果需要分析其他应用的界面实现也是采用这种方法哦. 打开 Android Device Mo ...
- android中列表的滑动删除仿ios滑动删除
大家是不是觉得ios列表的滑动删除效果很酷炫?不用羡慕android也可以实现相同的效果 并且可以自定义效果,比如左滑删除,置顶,收藏,分享等等 其实就是自定义listview重写listview方法 ...
- Android仿微信拍摄短视频
近期做项目需要添加上传短视频功能,功能设置为类似于微信,点击开始拍摄,设置最长拍摄时间,经过研究最终实现了这个功能,下面就和大家分享一下,希望对你有帮助. 1.视频录制自定义控件: /** * 视频播 ...
- Android 仿微信朋友圈发动态功能(相册图片多选)
代码分享 代码名称: 仿微信朋友圈发动态功能(相册图片多选) 代码描述: 仿微信朋友圈发动态功能(相册图片多选) 代码托管地址: http://www.apkbus.com/android-15276 ...
- Android 仿微信朋友圈添加图片
github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...
随机推荐
- #include <boost/weak_ptr.hpp>
弱指针boost::weak_ptr的定义在boost/weak_ptr.hpp里.到目前为止介绍的各种智能指针都能在不同的场合下独立使用.相反,弱指针只有在配合共享指针一起使用时才有意义.因此弱指针 ...
- Connect the Cities(prime)
Connect the Cities Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- 8位(bit)=1字节(Byte)
8位(bit)=1字节(Byte),1024字节=1KB: 提到了字节,不得不再提到“字”这个计量单位:“字”由若干个字节构成,字的位数叫做字长,字长就是说字所对应的二进制数的长度.不同的机器有不同的 ...
- Objective-C——判断对象等同性
无论我们使用什么语言,总是会出现需要判断两个对象是否相等的情况,OC当然也不例外.首先看一段代码: NSString *str1 = [[NSString alloc] initWithCString ...
- Swift中元组(Tuples),结构体(Struct),枚举(Enums)之间的区别
Swift有许多种存储数据方式,你可以用枚举(enums),元组(tuples),结构体(structs),类(classes),在这篇文章中我们将比较枚举.元组.结构体之间区别,首先从最简单的开始- ...
- iOS 三维变换
1:平移 一个4*4的单位矩阵乘以一个P(x,y,z,1)的行向量,则表示此矩阵向x轴移动了x的单位,向Y轴移动了y个单位,向Z轴移动了z个单位,最后获得移动后的目标矩阵是 [ 1, 0, 0, 0 ...
- Java基础笔记-异常总结,包
异常:是对问题的描述,将问题进行对象封装, 异常的体系: Throwable: 1.Error 2.Exception 1.RuntimeException 异常体系的特点: 异常体系中的所有类以及建 ...
- WebConfig自定义节点并读取
最近是遇到了一个需求,需要自定义WebConfig节点,然后进行读取,网上有很多博客,写的非常好,但是笔者在实现的过程中还是遇到了点问题,现在写一篇文章来总结下. 首先推荐大家看http://www. ...
- 详解 CSS 属性 - 伪类和伪元素的区别(再也不用概念盲了!!!)
首先,阅读 w3c 对两者的定义: CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪元素用于将特殊的效果添加到某些选择器. 可以明确两点,第一两者都与选择器相关,第二就是添加一些“特殊”的效果 ...
- 记一次phpStudy apache启动后自动关闭 修改过程
第一种可能原因:路径包含中文 .添加站点 2.重启服务 3.遇见问题 apache 刚启动,1秒钟中后就停止 4.解决问题 发现是自己添加的网站中包含中文路径的问题,建议不要在自己的网站目录下包含中文 ...