ViewDragHelper几个方法的理解

神奇的 ViewDragHelper,让你轻松定制拥有拖拽能力的 ViewGroup 为了吸引大家的注意力,先给大家看一张动图: 相信这种效果大家都见过吧?我第一次见到这样的效果时,心里也痒痒的,急于想实现这种功能,后来因为拖延症的问题,就一直没有去弄这件事。现在这段时间,工作比较轻闲,所以对自己几年 Android 生涯所运用的技术做一些总结与思考。拖拽这种功能正好可以形成一个主题。如题目所示,今天博文的目标就是介绍与分析 ViewDragHelper 这个类。 读者阅读本 阅读详情

转载标明出处:http://blog.youkuaiyun.com/coder_nice

smoothSlideViewTo()

通过此方法可以把父布局中某一个子View移动到指定的左边,移动过程会调用ViewDragHelper.Callback中的onViewPositionChanged()、onViewReleased()、clampViewPositionVertical等方法。
换句话说该方法就相当于模仿了人为的拖拽子View到特点坐标的过程。
可以通过此方法实现手势惯性的效果(只要手指轻轻滑动一段距离,判断用户确实想把子View滑动到目标坐标,即使用户中途松手或者未能滑动到目标坐标,也会自动把子View滑动到目标位置)
代码通常这样写:

if (mDragHelper.smoothSlideViewTo(mHeaderView, x, y)) {
            ViewCompat.postInvalidateOnAnimation(this);
            postInvalidate();
            return true;
        }

settleCapturedViewAt()

该方法与smoothSlideViewTo所实现的效果是一样的,区别在于smoothSlideViewTo()是指定一个子View,而settleCapturedViewAt()是在ViewDragHelper.Callback的onViewReleased()方法中获取当前释放的子View,然后实现手势惯性的效果。
代码如下:


    @Override
        public void onViewReleased(View releasedChild, float xvel, float yvel) {
            int top = getPaddingTop();
            if (yvel > 0 || (yvel == 0 && mDragOffset > 0.5f)) {
                top += mDragRange;
            }
        mDragHelper.settleCapturedViewAt(releasedChild.getLeft(), top);
            invalidate();
        }

先写到这里,另外的方法后续补上来。。。。

Android应用ViewDragHelper详解及部分源码浅析 到此一次ACTION_MOVE事件的触发处理也就分析完毕了。原来在上面findTopChildUnder()方法中返回当前被触摸的View时会有一种坑爹的情况出现,那就是如果在mParentView的同一个位置有多个子View是重叠的,此时又想让重叠的View中下面指定的那个被选中(默认for循环是倒序额)时getOrderedChildIndex()方法的默认实现就搞不定了,所以就需要我们自己去实现Callback里的getOrderedChildIndex()方法来改变查找子View的顺序。 阅读详情

相关推荐

Word | 简单可操作的快捷公式编号、右对齐和引用方法

在理工科论文的写作中,涉及到大量的公式输入,我们希望能够按照章节为公式进行编号,并且实现公式居中,编号右对齐的效果。网上有各种各样的方法来实现,操作繁琐和简单的混在一起,让没有接触过公式编号的人感觉比较混乱。笔者自己博览相关博客,亲身实践,总结出一套自认为比较简便的公式编号、对齐和引用方法,在这里分享给大家~

qq_43466146的博客 3万+

Android 实现View滑动几种方式

layout 在ACTION_MOVE中通过获取x、y的偏移量动态布局view,并禁止向父控件传递事件: @Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY();

Tiansen的博客 1596

SAP S/4HANA BP主数据-CVI模型

SAP BP主数据介绍 ECC系统中的客户、供应商主数据的限制: •一个客户或供应商仅能有一个地址 •客户和供应商没有关联关系(同一个实体公司) •如果一家公司既是供应商也是客户需建立两个主数据(数据冗余) •属性无时间相关性 S4系统中BP优点: •一个BP可以扮演多个角色(个人,客户,供应商)且角色之间数据共享 •时间相关的属性 •统一的数据架构,无数据冗余 •CVI模型可以确保BP和客户/供应商数据同步 SAP BP主数据配置 •配置BP角色/角色类别 •配置BP角.

qq_37785505的博客 1550

android 纵向 抽屉 自由拉伸,Android开发:使用ViewDragHelper实现抽屉拉伸效果

其实,有很多方法可以实现一个Layout的抽屉拉伸效果,最经常的方法就是自定义一个ViewGroup,然后控制点击事件,控制移动之类的,这种方法的代码量多,而且实现起来复杂,后期维护增加其他效果也很麻烦,直到今天看到了 ViewDragHelper这个类,就是专门为实现View的移动而生的,我就试着开发了一个抽屉拉伸的效果,效果图如下:所有移动的控制在ViewDragHelper.Callback...

weixin_42361071的博客 366

告别‘小爱同学’:用ESP32-S3和esp-sr SDK,从零打造一个离线语音助手(含完整代码)

本文详细介绍了如何利用ESP32-S3芯片和esp-sr SDK从零构建一个离线语音助手,涵盖硬件选型、声学设计、SDK配置及低功耗优化等关键步骤。通过实战案例和完整代码,帮助开发者实现自定义唤醒词和命令词,打造低成本、高隐私的本地语音控制解决方案。

weixin_29041195的博客 371

CANdelaStudio实战:如何用19服务快速编辑DTC快照数据(附Excel模板)

本文详细介绍了在CANdelaStudio中利用19服务高效编辑DTC快照数据的进阶技巧。通过导出DTC池至Excel进行批量编辑,结合‘Copy from DTC Pool’功能实现配置复用,并分享了构建自定义Excel模板与字段映射的实用方法,帮助工程师将繁琐的手动配置转化为工程化的批量处理,大幅提升诊断数据库开发效率。

weixin_29230773的博客 191

android自定义viewGroup常用方法

android常用控件可能在开发过程中不能满足我们的需求,所以常常需要自定义控件,这里总结了使用viewGroup自定义控件的方法,以及我的个人经验的总结。首先介绍viewGroup java.lang.Object ↳ android.view.View ↳ android.view.ViewGroup ↳ android.widget.LinearLayout

黑色幽默的专栏 846

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

Android ViewDragHelper 使用详解

Android ViewDragHelper使用详解,对于编写一个自定义的viewgroup ViewDragHelper是一个实用的类。它提供了很多有用的操作和状态,实现监听用户在父ViewGroup拖拽和重新定位子view。

Ya-Jun 的博客 1637

Verilog HDL 100道面试题及参考答案

在 Verilog HDL 中,参数(parameter)和宏定义(define)都可用于定义常量,但它们存在诸多不同之处。参数(parameter)是模块内部的常量定义,具有局部性。它在模块内部起作用,不同模块可以有同名的参数,且值可以不同。参数通常用于定义模块的一些配置信息,例如数据位宽、延迟时间等。参数的定义和使用是在模块的作用域内进行的,通过参数传递可以方便地对模块进行配置。endmodule在上述代码中,WIDTH是一个参数,用于定义加法器的位宽。通过改变WIDTH。

大模型大数据攻城狮的专栏 1734

基于FFT的轴承故障诊断 - MATLAB代码和详细解释

最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。因此,通过分析频谱图,我们可以识别轴承故障的特征。因此,通过分析频谱图,我们可以识别轴承故障的特征。我们可以选择适当的阈值,并在频谱图上标记异常特征。通过这种基于FFT的轴承故障诊断方法,我们可以快速、准确地检测和诊断轴承故障。接下来,我们将应用FFT来获取振动信号的频谱信息,频谱显示了信号在不同频率上的能量分布。通过将异常特征标记在频谱图上,我们可以直观地识别轴承故障的存在。

COWizard的博客 613

Android开发:使用ViewDragHelper实现抽屉拉伸效果

使用ViewDragHelper实现视图的抽屉拉伸效果

weidongjian的专栏 3630

OpenClaw人人养虾:接入即时通讯平台Zalo

通过 Zalo Official Account(OA,官方账号)API,可以将 OpenClaw 接入 Zalo,实现面向越南用户的自动化客服和互动。

王国平的博客 437

Android ViewDragHelper完全解析 自定义ViewGroup神器

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+] 转载请标明出处: http://blog.youkuaiyun.com/lmj623565791/article/details/46858663; 本文出自:【张鸿洋的博客】 一、概述 在自定义ViewGroup中,很多效果都包含用户手指去拖动其内部的某个View(eg:侧滑菜单等),针对具体的需要

第四维空间的专栏 955

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

强大的ViewDragHelper和ViewDragHelper的妙用 一

文如其名,本篇博文我们将详细介绍强大的ViewDragHelper,但是这次我们将他们分开,本篇我们将完全解析 ViewDragHelper,下一篇我们我们将系统的说明ViewDragHelper的妙用       一般情况下,当我们希望我们的UI动起来(变得灵活的)的时候我们一般会首先想到在onInterceptTouchEvent 和OnTouchEvent做出配合处理,这样的话,我

大叔的愤怒,你驾驭不了 6044

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ViewDragHelper.CallBack中每个方法的用法

ViewDragHelper.CallBack中每个方法的用法。转载请表明出处:http://blog.youkuaiyun.com/coder_niceclampViewPositionHorizontal();先看代码: @Override public int clampViewPositionHorizontal(View child, int left, int dx) {

coder_nice的专栏 4064

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ViewDragHelper简介

1,概述简单地来说,ViewDragHelper是一个实现滑动布局的辅助类。比如Google在support库中提供的DrawerLayout布局,就是用ViewDragHelper来实现的。 虽然现在有现成的滑动布局可以供我们使用,但是只有掌握ViewDragHelper的用法,我们才能够更加灵活地自定义我们需要的控件。 通常,ViewDragHelper用在一个自定义的ViewGroup中。

jialiang的博客 813

Android ViewDragHelper拖拽交互开发指南

在Android自定义View开发中,触摸事件处理和拖拽交互实现是常见的核心技术难点。ViewDragHelper作为Android Support库中的工具类,封装了触摸事件解析、惯性滑动计算和边界检测等核心逻辑,极大简化了复杂拖拽交互的开发流程。其底层通过状态机管理(IDLE/DRAGGING/SETTLING)和物理运动模拟算法,实现了接近原生系统的交互体验。在工程实践中,ViewDragHelper特别适用于侧滑菜单、可排序列表等场景,相比第三方库具有无依赖、低内存的优势。通过合理配置敏感度系数和边

weixin_30924239的博客 433

ViewDragHelper源码分析

ViewDragHelper的源码分析 。 开篇先说一下为什么会关注到这个类,也许好多人都没听过这个是干嘛的,不过对于DrawerLayout大家应该都很熟悉,是官方出的一个用于实现抽屉效果的布局控件,虽然在效果上可能没有SlidingMenu炫,不过胜在简单发,而DrawerLayout的底层实现就是ViewDragHelper。

一生中至少要有两次奋不顾身。一次为爱情,一次为梦想。 842

android viewdraghelper 点击移动,ViewDragHelper使用时遇到的问题

ViewDragHelper使用时遇到的问题今天在写一个用ViewDragHelper写一个上滑菜单的时候遇到了一个解决不了的问题。应该就是和ViewGroup的时间分发机制有关的问题。暂时想不到快捷的方法来解决这个问题。怎么描述呢,自定义一个ViewGroup的时候,为了测量和摆放的方便,选择继承了FrameLayout,布局文件中放了两个LinearLayout。放在前面的LinearLayo...

weixin_39604092的博客 417

事件传递机制和ViewDragHelper

事件传递机制和ViewDragHelper.

SunnyTime的程序猿之路 2351

ViewDragHelper基础使用

前言 Android中拖动问题很常见但是也很复杂,往往令开发者不知所措,为此系统在Support包中专门封装了一个ViewDragHelper工具类方便开发者实现各种滑动效果。在使用这个开发类之前先简单的看一下完全手动的实现拖动该怎么做,通过手工实现拖动更好的理解ViewDragHelper工具类的使用。 手工拖动实现 如何移动一个视图对象呢,可以为这个视图对象设置onTouchList...

xingzhong128的博客 703

ViewDragHelper (一)- 介绍及简单用例(入门篇)

随着入Android这个坑的时间越来越长,愈加觉得深入掌握原理以及技术输出的重要性,会使用轮子和造一个好轮子还是有天壤之别的。授人以鱼不如授人以渔,将一些经验分享出来,希望能够让更多的人更加深入地理解它,并帮助到有需要的朋友。本系列分为三篇,会由浅至深地对DrageHelper 进行详细讲解。本篇主要讲解如何利用DrageHelper 创建一个可拖拽的控件,以及它的基本使用方法。

小嵩的博客 3327

ViewDragHelper的学习

一、概述使用到ViewDragHelper是自己在做仿微信的侧滑删除操作时用到的,需要对Recycleview内的Item的滑动事件做处理,并将隐藏在屏幕右侧的view滑出来做出删除操作。自己的demo删除了,这里就借用一下ITluochen大神的demo,主要是能为自己以后用到ViewDragHelper提供方便与指引,ITluochen大神的demo讲解的其实非常详细了,大家也可以去看看。 这

firesmog的博客 527

ViewDragHelper用法介绍,快捷的拖动效果设计

许多朋友在开发中,经常会碰到许多的拖放,滑动效果处理。手势的判断让人烦不胜烦,还经常出现这样那样的问题,真是心累! 然而,在Android中,Google在其中support库的v4包中,为我们提供类一个强大的类——ViewDragHelper。通过这个类,我们基本可以实现各种各样的滑动与拖放效果。下面我们就来初步的了解一下这个类的用法。 如上图,我们通过ViewDragHelper来

大尧的博客 796
上一篇: Android 打造炫目的圆形菜单 秒秒钟高仿建行圆形菜单
下一篇: android之style样式-EditText样式
coder_nice
博客等级 码龄12年 33粉丝 23原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值