一种Android端防止View控件点击抖动的方法及装置与流程

文档序号:11250675阅读:756来源:国知局
一种Android端防止View控件点击抖动的方法及装置与流程

本发明涉及软件技术领域,特别涉及一种android端防止view控件点击抖动的方法及装置。



背景技术:

目前android端使用过程中,经常会遇到这样的情况,一个按钮点击后会弹出消息提示toast或者对话框dialog,如果快速重复地点击,则消息提示toast或者对话框dialog则会重复地出现。但实际上,这种快速重复地点击很多时候是误操作,不需要进行重复响应。toast、dialog等视图控件即view控件的重复出现,会导致view控件的抖动,用户体验较差。

现有技术中,针对view控件抖动的问题,通常需要重新进行view控件的项目开发,即重新进行view控件代码编写,开发工作量较大、开发效率低下。可见,现有技术中防止view控件抖动的项目开发存在工作量大、开发效率低下的技术问题。



技术实现要素:

本发明实施例提供一种android端防止view控件点击抖动的方法及装置,用于解决现有技术中防止view控件抖动的项目开发工作量大、开发效率低下的技术问题,减少开发工作量、提高开发效率。

本申请实施例提供一种android端防止view控件点击抖动的方法,包括:

通过aspectj编译所述点击函数和目标函数,其中,所述目标函数为对view控件的点击函数进行自定义注解的注解函数;

运行所述点击函数,检测获得用户对view控件进行点击的当前点击时间;

所述目标函数获得所述当前点击时间,判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值,若所述时间间隔小于所述时间临界值,确定当前点击无效,不触发所述点击函数执行当前点击对应的事件。

可选的,通过aspectj编译所述点击函数和目标函数,包括:

获得所述目标函数的切入点pointcut,通过aspectj编译所述点击函数时将所述目标函数的执行代码从所述切入点pointcut注入所述点击函数。

可选的,在所述判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值之前,所述方法还包括:

通过连接点joinpoint获得所述view控件的view;

判断所述view是否为空;

若所述view不为空,执行所述判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值的操作。

可选的,所述最近点击时间对应的参数类型为局部变量,所述最近点击时间的初始值为零。

可选的,在所述判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值之后,所述方法包括:将所述最近点击时间更新为所述当前时间。

可选的,所述点击函数为:单击函数、双击函数或重按函数。

本申请实施例还提供一种android端防止view控件点击抖动的装置,该装置包括:

编译单元,用于通过aspectj编译所述点击函数和自定义注解对应的目标函数,其中,所述目标函数为对view控件的点击函数进行自定义注解的注解函数;

检测单元,用于运行所述点击函数,检测获得用户对view控件进行点击的当前点击时间;

判断单元,用于通过所述目标函数获得所述当前点击时间,判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值,若所述时间间隔小于所述时间临界值,确定当前点击无效,不触发所述点击函数执行当前点击对应的事件。

可选的,所述编译单元,用于:获得所述目标函数的切入点pointcut,通过aspectj编译所述点击函数时将所述目标函数的执行代码从所述切入点pointcut注入所述点击函数。

可选的,所述装置还包括:获取单元,用于在所述判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值之前,通过连接点joinpoint获得所述view控件的view;

所述判断单元还用于:判断所述view是否为空;若所述view不为空,执行所述判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值的操作。

可选的,所述点击函数为:单击函数、双击函数或重按函数。

本申请实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:

本申请实施例提供一种android端防止view控件点击抖动的方法,通过对view控件的点击函数进行自定义注解;然后,通过aspectj编译所述点击函数和自定义注解对应的目标函数;接着,运行点击函数检测获得用户对view控件进行点击的当前点击时间;继而,通过目标函数获得当前点击时间,判断当前时间点之前的最近点击时间与当前时间之间的时间间隔是否小于时间临界值,若时间间隔小于时间临界值,确定当前点击无效,不触发点击函数执行当前点击对应的事件,从而避免了view控件重复出现导致抖动产生。即防止view控件抖动的开发过程中,只需对自定义注解的目标函数即防抖动函数进行开发,通过自定义注解和aspectj编译即可将目标函数的执行代码注入到点击函数中,实现view控件的防抖动功能,避免了对view控件的重新开发,进而解决了现有技术中防止view控件抖动的项目开发工作量大、开发效率低下的技术问题,减少了开发工作量、提高了开发效率。

附图说明

图1为本申请实施例提供的一种android端防止view控件点击抖动的方法的流程图;

图2为本申请实施例提供的一种android端防止view控件点击抖动的装置的结构框图。

具体实施方式

在本申请实施例提供的技术方案中,通过自定义注解和aspectj编译将防抖动方法的执行代码注入到点击函数中,实现view控件的防抖动功能,避免了对view控件的重新开发,进而解决了现有技术中防止view控件抖动的项目开发工作量大、开发效率低下的技术问题,减少开发工作量、提高开发效率。

下面对本申请涉及到的技术术语进行说明:

aop:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。

aspectj:是一个面向切面的框架,它扩展了java语言,定义了各种连接点集合来实现aop。aspectj提供了一个专门的编译器用来生成遵守java字节编码规范的class文件。

advice(通知):典型的advice类型有before、after和around,分别表示在目标方法执行之前、执行后和完全替代目标方法执行的代码。

jointpoint(连接点):程序中可能作为代码注入对象的特定的点和入口。

pointcut(切入点):告诉代码注入工具,在何处注入一段特定代码的表达式。

aspect(切面):pointcut和advice的组合看做切面。

自定义注解:自动继承了java.lang.annotation.annotation接口,由编译程序自动完成其他细节。在自定义注解时,可以用@interface来声明一个注解,其注解中的每一个方法实际上是声明了一个配置参数。

下面结合附图对本申请实施例技术方案的主要实现原理、具体实施方式及其对应能够达到的有益效果进行详细的阐述。

实施例

请参考图1,本申请实施例提供一种android端防止view控件点击抖动的方法,该方法包括:

s11:通过aspectj编译所述点击函数和目标函数,其中,所述目标函数为对view控件的点击函数进行自定义注解的注解函数;

s12:运行所述点击函数,检测获得用户对view控件进行点击的当前点击时间;

s13:所述目标函数获得所述当前点击时间,判断所述当前时间之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值,若所述时间间隔小于所述时间临界值,确定当前点击无效,不触发所述点击函数执行当前点击对应的事件。

具体实施过程中,本申请实施例提供的一种android端防止view控件点击抖动方法,可以应用于view控件的单击防抖动、撞击防抖动、重按防抖动等,对应的点击函数可以为singleclick、doubleclick、heavilypress。下面以单击防抖动为例对本申请的具体实施过程进行详细说明。

在执行s11之前,对view控件的点击函数进行自定义注解,包含如下3个步骤:

步骤1、定义自定义注解的对象和作用时段

可以使用@interface自定义注解点击函数singleclick。具体的,使用@interface时,需要定义注解可以作用的目标为函数方法method:@target(elementtype.method),及定义注解的作用时段是在编译时注解class:@retention(retentionpolicy.class)。

例如,使用@interface自定义注解点击函数singleclick的代码示例如下:

@retention(retentionpolicy.class)

@target(elementtype.method)

public@interfacesingleclick{

}

其中{}内为自定义注解的目标函数,即自定义数据所要执行的方法。

步骤2、编写目标函数

目标函数可以由aspectj切面程序代码实现。具体的,目标函数中需要将点击函数作为目标函数的pointcut切入点,使得aspectj编译所述点击函数时将目标函数的执行代码注入点击函数。例如,pointcut切入点匹配规则可以为如下方法切入点:

@pointcut("execution(@com.app.aop.annotation.singleclick**(..))")//

在切入点后需要对目标函数要执行的方法进行编写,包括:

a.定义一个全局变量min_click_delay_time,用来标识快速点击间隔的时间临界值。

b.通过joinpoint.getargs()[0]获取当前需要检测的view控件的点击view,并判断view是否为空null。在确定view不为null时执行点击时间判断。

c.定义局部变量lastclicktime,记录最后一次点击时间即当前时间之前的最近点击时间。最近点击时间初始化为0,并通过view.settag()函数保存。

d.每次触发点击时间前进行判断,判断lastclicktime与当前点击的当前时间之间的时间间隔是否小于时间临界值,若小于时间临界值,则确认当前点击为无效点击,不触发点击函数执行当前点击对应的事件,反之,则触发执行当前点击对应的事件。

其中,目标函数的执行方法可以通过advice(通知)来实现。advice为在joinpoint上执行的一个动作,通过拦截器调用,向连接点注入的代码。例如,可以通过advice中的around实现目标函数的执行方法,主要代码如下:

完成对点击函数的自定义注解之后,在项目中可以直接使用自定义注解的点击函数。具体的,可以在view的onclicklistener的onclick()重载方法上面加上@singleclick即可使用自动以注解的点击函数,例如:

完成自定义注解之后,执行s11通过aspectj编译所述点击函数和自定义注解对应的目标函数,实现将目标函数编织进入目标函数中即点击函数中,达到非侵入式aop的目的。其中,在编译时可以使用第三方aspectj集成插件gradle-android-aspectj-plugin。

编译完成后,即可执行s12:运行点击函数,检测获得用户对view控件进行点击的当前点击时间。由于点击函数内编译有目标函数的执行代码,会触发执行s13。

执行s13目标函数获得当前点击时间时,判断当前时间点之前的最近点击时间与当前时间之间的时间间隔是否小于时间临界值。若时间间隔小于时间临界值,表明当前点击为用户的误操作,则确定当前点击无效,不触发点击函数执行当前点击对应的事件如消息提示、对话框弹出。若时间间隔大于等于时间临界值,表明当前点击不是用户的误操作,则确定当前点击有效,触发点击函数执行当前点击对应的事件。其中,时间临界值可以为0.5s、1s、2s等。

具体实施过程中,为了避免目标函数运行过程中的无效判断,可以在对当前时间进行判断之前,通过连接点joinpoint获得view控件的view;判断view是否为空。若view不为空,执行判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值的操作。反之,若view为空,直接确定当前点击为无效点击,不触发所述点击函数执行当前点击对应的事件。

进一步的,在判断当前时间点之前的最近点击时间与当前时间之间的时间间隔是否小于时间临界值之后,将最近点击时间更新为当前时间,保证最近点击时间的时效性,以便于下对次点击操作有效性进行判断。

请参考图2,基于上述实施例提供的一种android端防止view控件点击抖动的方法,本申请实施例还对应提供一种android端防止view控件点击抖动的装置,该装置包括:

编译单元21,用于通过aspectj编译所述点击函数和目标函数,其中,所述目标函数为对view控件的点击函数进行自定义注解的注解函数;

检测单元22,用于运行所述点击函数,检测获得用户对view控件进行点击的当前点击时间;

判断单元23,用于通过所述目标函数获得所述当前点击时间,判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值,若所述时间间隔小于所述时间临界值,确定当前点击无效,不触发所述点击函数执行当前点击对应的事件。

其中,所述点击函数为:单击函数、双击函数或重按函数。

作为一种可选的实施方式,所述编译单元21在编译时用于:获得所述目标函数的切入点pointcut,通过aspectj编译所述点击函数时将所述目标函数的执行代码从所述切入点pointcut注入所述点击函数。

在具体实施过程中,所述装置还包括:获取单元24,用于在所述判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值之前,通过连接点joinpoint获得所述view控件的view;所述判断单元23还用于:判断所述view是否为空;若所述view不为空,执行所述判断所述当前时间点之前的最近点击时间与所述当前时间之间的时间间隔是否小于时间临界值的操作。

关于上述实施例中的装置,其中各个单元执行时的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

通过本申请实施例中的一个或多个技术方案,可以实现如下一个或多个技术效果:

通过对view控件的点击函数进行自定义注解;然后,通过aspectj编译所述点击函数和自定义注解对应的目标函数;接着,运行点击函数检测获得用户对view控件进行点击的当前点击时间;继而,通过目标函数获得当前点击时间,判断当前时间点之前的最近点击时间与当前时间之间的时间间隔是否小于时间临界值,若时间间隔小于时间临界值,确定当前点击无效,不触发点击函数执行当前点击对应的事件,从而避免了view控件重复出现导致抖动产生。即防止view控件抖动的开发过程中,只需对自定义注解的目标函数即防抖动函数进行开发,通过自定义注解和aspectj编译即可将目标函数的执行代码注入到点击函数中,实现view控件的防抖动功能,避免了对view控件的重新开发,进而解决了现有技术中防止view控件抖动的项目开发工作量大、开发效率低下的技术问题,减少了开发工作量、提高了开发效率。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1