我的编程空间,编程开发者的网络收藏夹
学习永远不晚

android实现QQ微信侧滑删除效果

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

android实现QQ微信侧滑删除效果

最近由于项目需求,需要做一个listview中的item策划删除的效果,与是查找资料和参考了一些相关的博客,终于完美实现了策划删除的效果。

先看一下效果图(研究了半天竟然没研究出来真机上gif图怎么做,大家将就看一下吧)。

android实现QQ微信侧滑删除效果     

侧滑效果图

android实现QQ微信侧滑删除效果

点击删除后的截图

android实现QQ微信侧滑删除效果

点击删除后,listview中的第一个“微信团队”被删除。

接下来看代码部分,很多注释都在代码中,直接上代码。

首先自定义个SlideView继承LinearLayout。

import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Scroller; import android.widget.TextView;    public class SlideView extends LinearLayout {      private static final String TAG = "SlideView";      private Context mContext;      // 用来放置所有view的容器    private LinearLayout mViewContent;      // 用来放置内置view的容器,比如删除 按钮    private RelativeLayout mHolder;      // 弹性滑动对象,提供弹性滑动效果    private Scroller mScroller;      // 滑动回调接口,用来向上层通知滑动事件    private OnSlideListener mOnSlideListener;      // 内置容器的宽度 单位:dp    private int mHolderWidth = 120;      // 分别记录上次滑动的坐标    private int mLastX = 0;    private int mLastY = 0;      // 用来控制滑动角度,仅当角度a满足如下条件才进行滑动:tan a = deltaX / deltaY > 2    private static final int TAN = 2;      public interface OnSlideListener {      // SlideView的三种状态:开始滑动,打开,关闭      public static final int SLIDE_STATUS_OFF = 0;      public static final int SLIDE_STATUS_START_SCROLL = 1;      public static final int SLIDE_STATUS_ON = 2;        public void onSlide(View view, int status);    }      public SlideView(Context context) {      super(context);      initView();    }      public SlideView(Context context, AttributeSet attrs) {      super(context, attrs);      initView();    }      private void initView() {      mContext = getContext();      // 初始化弹性滑动对象      mScroller = new Scroller(mContext);      // 设置其方向为横向      setOrientation(LinearLayout.HORIZONTAL);      // 将slide_view_merge加载进来      View.inflate(mContext, R.layout.slide_view_merge, this);      mViewContent = (LinearLayout) findViewById(R.id.view_content);      mHolderWidth = Math.round(TypedValue.applyDimension(          TypedValue.COMPLEX_UNIT_DIP, mHolderWidth, getResources()              .getDisplayMetrics()));    }      // 设置按钮的内容,也可以设置图标啥的,我没写    public void setButtonText(CharSequence text) {      ((TextView) findViewById(R.id.delete)).setText(text);    }      // 将view加入到ViewContent中    public void setContentView(View view) {      mViewContent.addView(view);    }      // 设置滑动回调    public void setOnSlideListener(OnSlideListener onSlideListener) {      mOnSlideListener = onSlideListener;    }      // 将当前状态置为关闭    public void shrink() {      if (getScrollX() != 0) {        this.smoothScrollTo(0, 0);      }    }      // 根据MotionEvent来进行滑动,这个方法的作用相当于onTouchEvent    // 如果你不需要处理滑动冲突,可以直接重命名,照样能正常工作    public void onRequireTouchEvent(MotionEvent event) {      int x = (int) event.getX();      int y = (int) event.getY();      int scrollX = getScrollX();      Log.d(TAG, "x=" + x + " y=" + y);        switch (event.getAction()) {      case MotionEvent.ACTION_DOWN: {        if (!mScroller.isFinished()) {          mScroller.abortAnimation();        }        if (mOnSlideListener != null) {          mOnSlideListener.onSlide(this,              OnSlideListener.SLIDE_STATUS_START_SCROLL);        }        break;      }      case MotionEvent.ACTION_MOVE: {        int deltaX = x - mLastX;        int deltaY = y - mLastY;        if (Math.abs(deltaX) < Math.abs(deltaY) * TAN) {          // 滑动不满足条件,不做横向滑动          break;        }          // 计算滑动终点是否合法,防止滑动越界        int newScrollX = scrollX - deltaX;        if (deltaX != 0) {          if (newScrollX < 0) {            newScrollX = 0;          } else if (newScrollX > mHolderWidth) {            newScrollX = mHolderWidth;          }          this.scrollTo(newScrollX, 0);        }        break;      }      case MotionEvent.ACTION_UP: {        int newScrollX = 0;        // 这里做了下判断,当松开手的时候,会自动向两边滑动,具体向哪边滑,要看当前所处的位置        if (scrollX - mHolderWidth * 0.75 > 0) {          newScrollX = mHolderWidth;        }        // 慢慢滑向终点        this.smoothScrollTo(newScrollX, 0);        // 通知上层滑动事件        if (mOnSlideListener != null) {          mOnSlideListener.onSlide(this,              newScrollX == 0 ? OnSlideListener.SLIDE_STATUS_OFF                  : OnSlideListener.SLIDE_STATUS_ON);        }        break;      }      default:        break;      }        mLastX = x;      mLastY = y;    }      private void smoothScrollTo(int destX, int destY) {      // 缓慢滚动到指定位置      int scrollX = getScrollX();      int delta = destX - scrollX;      // 以三倍时长滑向destX,效果就是慢慢滑动      mScroller.startScroll(scrollX, 0, delta, 0, Math.abs(delta) * 3);      invalidate();    }      @Override    public void computeScroll() {      if (mScroller.computeScrollOffset()) {        scrollTo(mScroller.getCurrX(), mScroller.getCurrY());        postInvalidate();      }    }    }

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

android实现QQ微信侧滑删除效果

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

android实现QQ微信侧滑删除效果

最近由于项目需求,需要做一个listview中的item策划删除的效果,与是查找资料和参考了一些相关的博客,终于完美实现了策划删除的效果。先看一下效果图(研究了半天竟然没研究出来真机上gif图怎么做,大家将就看一下吧)。 侧滑效果图
2023-05-30

Android仿QQ微信侧滑删除效果

仿QQ侧滑删除效果图1.自定义listviewpublic class DragDelListView extends ListView {private boolean moveable=false;private boolean clo
2022-06-06

Android实现3种侧滑效果(仿qq侧滑、抽屉侧滑、普通侧滑)

自己实现了一下侧滑的三种方式(注释都写代码里了) 本文Demo下载地址:Andriod侧滑 本文实现所需框架:nineoldandroids下载地址:nineoldandroids 1.普通侧滑: 主要是基于HorizontalScroll
2022-06-06

ViewDragHelper实现QQ侧滑效果

前言 侧滑的实现方式有很多方式来实现,这次总结的ViewDragHelper就是其中一种方式,ViewDragHelper是2013年谷歌I/O大会发布的新的控件,为了解决界面控件拖拽问题。下面就是自己学习写的一个实现类似于QQ
2023-05-30

Android实现QQ侧滑(删除、置顶等)功能

实现类似QQ滑动出现可操作项的功能,在网上看到有人自定义LinearLayout实现这个效果,但是灵活性有限。此demo使用开源项目SwipeLayout实现该功能。关于SwipeLayout的常用设置和属性,这里都做介绍,下面进入正题。一
2023-05-30

Android如何实现微信侧滑删除当前页面

这篇文章给大家分享的是有关Android如何实现微信侧滑删除当前页面的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下效果图不是太明显 实际上有finish动画代码package com.finddrea
2023-05-30

Android怎么实现微信侧滑关闭页面效果

这篇文章主要介绍了Android怎么实现微信侧滑关闭页面效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原理在每个Activity里面都有一个底层的View,也就是所谓的r
2023-05-30

Android使用Item Swipemenulistview实现仿QQ侧滑删除功能

大家都用过QQ,肯定有人好奇QQ滑动删除Item的效果是怎样实现的,其实我们使用Swipemenulistview就可以简单的实现。先看看我们项目中的效果: 使用的时候可以把Swipemenulistview作为一个library,也
2022-06-06

android如何基于SwipeRefreshLayout实现类QQ的侧滑删除

小编给大家分享一下android如何基于SwipeRefreshLayout实现类QQ的侧滑删除,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!还是效果图优先效果图
2023-05-30

Android自定义view系列之99.99%实现QQ侧滑删除效果实例代码详解

首先声明本文是基于GitHub上"baoyongzhang"的SwipeMenuListView修改而来,该项目地址: https://github.com/baoyongzhang/SwipeMenuListView 可以说这个侧滑删除效
2022-06-06

Android使用SwipeListView实现类似QQ的滑动删除效果

QQ的滑动删除效果很不错,要实现这种效果,可以使用SwipeListView。1. 下载com.fortysevendeg.swipelistview这个项目(以前GitHub上有,现在GitHub上没有了,百度了很多次才下载到的),导入E
2022-06-06

Android_UI 仿QQ侧滑菜单效果的实现

相信大家对QQ侧滑菜单的效果已经不陌生了吧,侧滑进入个人头像一侧,进行对头像的更改,我的收藏,QQ钱包,我的文件等一系列的操作,今天呢,主要是实现进入侧滑菜单的这一效果原理进行分析. 主要思路分析 1.首先写一个SlideMenu 继承
2022-06-06

Android仿微信对话列表滑动删除效果

微信对话列表滑动删除效果很不错的,借鉴了github上SwipeListView(项目地址:https://github.com/likebamboo/SwipeListView),在其上进行了一些重构,最终实现了微信对话列表滑动删除效果。
2022-06-06

Android Drawerlayout实现侧滑菜单效果

本文实例为大家分享了Drawerlayout侧滑菜单的具体代码,供大家参考,具体内容如下1、Drawerlayout的xml布局
2023-05-30

Android高仿微信对话列表滑动删除效果

前言 用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有。思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可。由于ListView是上下滑动而item是左右滑动,因此会有滑动
2022-06-06

Android App中ListView仿QQ实现滑动删除效果的要点解析

本来准备在ListView的每个Item的布局上设置一个隐藏的Button,当滑动的时候显示。但是因为每次只要存在一个Button,发现每个Item上的Button相互间不好控制。所以决定继承ListView然后结合PopupWindow。
2022-06-06

Android侧滑效果简单实现代码

先看看效果: 首先,导入包:compile files('libs/nineoldandroids-2.4.0.jar')r然后在main中创建一个widget包。 c创建ViewDragHelper类public class ViewD
2022-06-06

Android UI实现SlidingMenu侧滑菜单效果

本篇博客给大家分享一个效果比较好的侧滑菜单的Demo,实现点击左边菜单切换Fragment。 效果如下: 主Activity代码:package com.infzm.slidingmenu.demo; import android.os
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录