效果展示

基础知识

认识 ViewDragHelper 类

和我们上次在这篇文章 仿QQ6.0主页面侧滑效果(第二种实现方法) 中所讲的 GestureDetector 类一样,ViewDragHelper类也是系统给我们提供的 一种处理用户拖拽 View 的手势处理类。

ViewDragHelper 不能直接 new 出来(因为源码中构造方法前是 private),但是,系统给我们提供了一个创建方法 ViewDragHelper.create()。

代码演示

xml布局

<?xml version="1.0" encoding="utf-8"?><com.wust.myslidingmenu.VerticalDragListViewxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="200dp"android:background="#0ff"android:gravity="center"android:text="后面"/><TextViewandroid:layout_width="match_parent"android:layout_height="300dp"android:background="#00f"android:gravity="center"android:text="前面"/></com.wust.myslidingmenu.VerticalDragListView>

自定义布局的 java 代码逻辑

package com.wust.myslidingmenu;import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.customview.widget.ViewDragHelper;public class VerticalDragListView extends FrameLayout {private ViewDragHelper mDragHelper;public VerticalDragListView(@NonNull Context context) {this(context,null);}public VerticalDragListView(@NonNull Context context, @Nullable AttributeSet attrs) {this(context, attrs,0);}public VerticalDragListView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);//第一步:创建 ViewDragHelper 类mDragHelper = ViewDragHelper.create(this,new cb());}//第二步:继承回调,并实现里面的方法private class cb extends ViewDragHelper.Callback {//是否允许子代滑动 false表示不允许 true表示允许,单单实现这个方法还不够,//垂直的话还得复写 clampViewPositionVertical,水平:clampViewPositionHorizontal@Overridepublic boolean tryCaptureView(@NonNull View child, int pointerId) {return true;}//这个方法的返回值就是 你拖拽的View最终要到达的地方@Overridepublic int clampViewPositionVertical(@NonNull View child, int top, int dy) {return top;}@Overridepublic int clampViewPositionHorizontal(@NonNull View child, int left, int dx) {return left;}}@Overridepublic boolean onTouchEvent(MotionEvent event) {//第三步:接收 onTouch 传来的事件mDragHelper.processTouchEvent(event);return true;}
}

优化

  1. 只能让前面 View 拖拽
  2. 前面 View 向下拖拽不能超过 后面 View 高度
  3. 未过半自动收起,过半自动展开
  4. 与 ListView 结合,处理事件冲突

有偿提问

如果大家觉得这篇文章帮助你了,可以支持一下。

有偿提问

仿二手车之家下拉列表相关推荐

  1. 仿二手车之家下拉列表(优化)

    最终效果展示 这篇文章是继 仿二手车之家下拉列表 之后的优化篇,请大家按顺序阅读学习. 优化一:只能让前面 View 拖拽 package com.wust.myslidingmenu;import ...

  2. android仿IT之家、炫酷水波纹、Kotlin MVP项目、后台模拟点击、蜂巢迷宫小游戏等源码...

    Android精选源码 Android 炫酷的多重水波纹源码 Android开发一款基于行为识别和个性化推荐的智能推荐APP 仿IT之家Android源码 android判断App位于前台或者后台源码 ...

  3. android仿IT之家、炫酷水波纹、Kotlin MVP项目、后台模拟点击、蜂巢迷宫小游戏等源码

    Android精选源码 Android 炫酷的多重水波纹源码 Android开发一款基于行为识别和个性化推荐的智能推荐APP 仿IT之家Android源码 android判断App位于前台或者后台源码 ...

  4. 【无限互联】学员作品:仿汽车之家的App

    一.项目介绍:    本次项目是一个仿汽车之家的一款App:它主要是用来帮助人们不用出门就可以学习和掌握关于汽车各种知识和信息,也可以帮想买车的朋友买到一款符合你各种需求的好车. 二.效果图: 1.首 ...

  5. 帝国cms模板仿系统之家

    简介: (仿系统之家)源码功能特点: 1.全局设置功能(可以设置企业的基本信息) 2.导航菜单管理(前台采用jquery插件实现二级下拉菜单,后台可设置菜单的显示和隐藏) 3.客服功能(可以很方便的为 ...

  6. 二手新能源车数据爬虫(人人车,第一手车,二手车之家)

    爬取属性有:1.第一车网 id title date kilometers location current-price original_price vehicle_grade driving_mo ...

  7. 饮食健康系统源码php,织梦DEDECMS仿健康之家健康问答系统整站源代码

    织梦DEDECMS仿健康之家健康问答系统整站源代码实用性健康网站+一键采集功能+在线问答+医院展示效果,后台有采集功能,一键采集入库海量数据,并且有问答系统,非常不错.如果你的行业跟医疗行业相关,可以 ...

  8. 高仿it之家新闻客户端源码

    仿it之家新闻客户端界面,数据为本地假数据.仅实现了新闻模块的功能. 源码下载:http://code.662p.com/list/11_1.html 详细说明:http://android.662p ...

  9. 仿站长之家查询源码php,仿站长之家博客 织梦IT资讯博客源码 v1.0

    有福了,给大伙分享个好源码: 仿站长之家博客 织梦IT资讯博客源码,效果相当的炫酷,相当简洁大气高端,模板简单,全部已数据调用,只需后台修改栏目名称即可 模板介绍 仿站长之家博客 织梦IT资讯博客源码 ...

最新文章

  1. torch.bmm()函数的使用
  2. 一个FragmentActivity多个Fragment的生命周期事件记录
  3. 米的换算单位和公式_求小学数学的公式、换算和单位转英文字母(米cm)
  4. mach-o格式分析
  5. Java方法中的参数太多,第5部分:方法命名
  6. mac 鼓捣php 多版本切换
  7. (王道408考研操作系统)第四章文件管理-第二节3:减少延迟时间的方法
  8. 惰性求值——lodash源码解读
  9. dao-service-servlet-jsp构建简易web通讯录(三层开发)预备知识
  10. 罗永浩宣布进军电商直播;微博回应用户数据泄露;Android 11 开发者预览版 2 发布 | 极客头条...
  11. MVC的Filter应用小结
  12. C#笔记04 数组和循环
  13. JavaScript页面跳转并传参的常用方法
  14. 智慧监狱UWB定位系统解决方案
  15. 手把手教你使用Bitvise Tunnelier设置SSH代理服务器
  16. 基于Labview的空气质量监测系统设计_STM32F103C8T6(程序+原理图+PCB)
  17. 头像加相框微信小程序
  18. 网易云易盾正式成为“中国短视频与直播联盟”常务理事
  19. ABAP 新特性 - CORRESPONDING
  20. 什么是CSTC价值协议

热门文章

  1. 计算机模拟合理用药,药学实训与虚拟仿真实验中心
  2. SpringBoot测试junit遇到的坑
  3. CAD控件教程:网上打开dwg文件时,对dwg文件路径加密的功能
  4. Nginx报 No input file specified. 的问题解决之路
  5. unity 手机重力迷宫(四)
  6. 基于arduino的智能防疫消毒机器人源码展示
  7. armeabi-v7a armeabi arm64-v8a 有何区别 ,英雄不问出处
  8. 前端必备工具大全------强推!!!
  9. CAD在线转换PDF格式怎么操作?
  10. shiny 服务器未响应,R Shiny服务器无法呈现正确的ggplot字体系列