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,先拿来用吧,毕竟老板催的紧, ...
随机推荐
- MinGW 使用 msvcr90.dll
MinGW 编译出来的程序总是使用 VC6 的 msvcrt.dll ,VC8,9,10有很多新的API(仅限于c runtime),想使用怎么办? 比如:boost 对 MinGW 最低要求就是 m ...
- wordpress参考网站
wordpress大学http://www.wpdaxue.com/post-tags-and-categories-for-pages.html
- uva 10382 Watering Grass_贪心
题意:给你个矩形n*m,再给你n个圆的圆心坐标和半径,问最用最少用几个圆把这个矩形覆盖 思路:直接想发现这问题不容易,后来发现可以把圆看做区间(能把矩形面积覆盖),然后这个问题就容易解决了 #incl ...
- 网易云课堂_C语言程序设计进阶_期末考试编程题部分
1 字符串循环右移(5分) 题目内容: 输入一个字符串和一个非负整数N,要求将字符串循环右移N次. 输入格式: 输入在第1行中给出一个字符串,以'#'表示结束,‘#’不是字符串的一部分,字符串的长度未 ...
- Fire Net(dfs)
Fire Net Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- 济南最新公交线路一览(BRT)
济南最新公交线路一览(BRT) 济南BRT1路 高速公交线路 黄岗路东5:30-21:30 全福立交桥西5:30-21:30 票价1元,刷卡9折,月票有效 高速公交公司 去程:黄岗路东(BRT) - ...
- opengl笔记——旋转,一段代码的理解
重看:opengl笔记——OpenGL好资料备忘 在找到这段代码,对理解opengl旋转很有帮助 ... glPushMatrix(); // initialze ModelView matrix g ...
- js 将网页内容生成图片
$(function () { $("#saveimg_btn").on("click",function (event) { event.preventDef ...
- javascript——touch事件介绍与实例演示
分类: javascript2014-02-12 16:42 1742人阅读 评论(0) 收藏 举报 touch事件touchmovetouchstarttouchend 前言 诸如智能手机和平板 ...
- 与时间有关的windows函数
(一)time_t time(time_t *t) 如果t是空指针,直接返回当前时间.如果t不是空指针,返回当前时间的同时,将返回值赋予t指向的内存空间. 这个函数的返回值,是指自 Unix 纪元(J ...