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,先拿来用吧,毕竟老板催的紧, ...
随机推荐
- C语言的本质(14)——不完全类型和复杂声明
ISO 将 C 的类型分为三个不同的集合: 函数.对象和不完全类型三大类.函数类型很明显:对象类型包含其他一切,除非不知道对象的大小.该标准使用术语"对象类型"指定指派的对象必须具 ...
- linux之SQL语句简明教程---BETWEEN
IN 这个指令可以让我们依照一或数个不连续 (discrete) 的值的限制之内抓出数据库中的值,而BETWEEN 则是让我们可以运用一个范围 (range) 内抓出数据库中的值.BETWEEN 这个 ...
- linux监控脚本
1,snmp安装脚本for ubuntu/CentOS #!/usr/bin/env bash export LC_ALL=C " ] then >& exit fi #### ...
- Linq 中的Select事例
---恢复内容开始--- 1.对查询结果进行转换. string[] names={"ADE","Jerry","Steves"}; var ...
- C#6 冒泡 折半查找 二维数组
人类思维--计算机逻辑思维 逻辑思维--代码实现 写书法: 描红--临摹--碑贴--自成一体--草 章节复习: 数组:一维,二维,多维 一维:豆角.连续,同一类型. 定义:数据类型[] 数组名=new ...
- switch 与 whille相互套用
一直自以为还比较了解C++,这两天写个小工具结果出现了个bug,查了几个小时.现在才发现我这么水. switch是C++后来推出了,目的在于提高代码结构清晰度. 但是switch与while连用时是有 ...
- MySQL取得当前时间的函数是什么 格式化日期的函数是什么
取得当前时间用 now() 就行.在数据库中格式化时间 用DATE_FORMA T(date, format) .根据格式串format 格式化日期或日期和时间值date,返回结果串. 可用DATE_ ...
- oracle distinct 去除重复,同时按某字段排序
SELECT distinct supplier_id, min(evidence_date) as evidence_date FROM TD_SUPPLIER_EVIDENCE_INFO wher ...
- jquery ajax后台向前台传list 前台用jquery $.each遍历list
$.ajax({ type: 'post', url: xxx.action', dataType: 'text', success: function(data){ var dataObj=eval ...
- redis安装方法
redis安装方法1.通过lnmp一键安装包,然后执行./addons.sh install redis2.yum -y install redis3.wget http://redis.google ...