一种处理滑动事件的方法、装置、设备、介质和系统与流程
未命名
08-29
阅读:90
评论:0

1.本发明涉及安卓系统开发技术领域,尤其涉及一种处理滑动事件的方法、装置、设备、介质和系统。
背景技术:
2.随着市面上越来越多app的出现,各种眼花缭乱,绚丽的界面效果层出不穷,随着而来的是对界面布局的代码有着更高的要求。例如一种很常见的滑动布局嵌套滑动列表,这种嵌套方式在市面上的app是很常见的存在,采用的就是nestedscrollview嵌套recyclerview,这种嵌套方式能够满足整个界面整体滚动的一个效果,当列表的数据量小的时候可能还不能看出什么问题,当数据量一旦达到几百条的时候(数据量跟列表展示信息的复杂程度相关),就会出现明显的滑动卡顿问题。
技术实现要素:
3.基于此,有必要针对上述问题,提出了一种安卓系统中嵌套滑动方法、电子设备和存储介质,能够有效解决安卓系统中滑动卡顿的问题。
4.第一方面,本技术提供处理滑动事件的方法,所述方法应用于安装于安卓操作系统的应用程序中,包括:
5.创建自定义类,所述自定义类继承目标父类,并将所述自定义类设置为目标子类的父布局;
6.获取所述自定义类的父布局高度,根据所述父布局高度设定所述目标子类的子布局高度,所述子布局高度不超过所述父布局高度;
7.检测到发生滑动事件时,由所述自定义类处理所述滑动事件,判断所述自定义类是否能够处理全部的所述滑动事件;
8.若否,则由所述自定义类处理第一部分所述滑动事件,由所述目标子类处理第二部分所述滑动事件。
9.其中,所述由所述自定义类处理第一部分所述滑动事件的步骤之前,还包括:
10.检测到发生滑动事件时,判断所述滑动事件是否为快速滑动事件,若所述滑动事件为快速滑动事件,由所述自定义类处理所述快速滑动事件,判断所述自定义类是否能够处理完成全部的所述快速滑动事件;
11.若否,所述自定义类处理第一部分所述快速滑动事件,由所述目标子类处理第二部分所述快速滑动事件。
12.其中,所述判断所述自定义类是否能够处理完成所述快速滑动事件的步骤之后,包括:
13.当所述自定义类处理不完所述快速滑动事件时,由所述目标子类和所述自定义类同步处理所述快速滑动事件。
14.其中,所述处理滑动事件的方法,还包括:
15.重写所述自定义类的快速滑动方法,设定当所述自定义类处理不完所述快速滑动事件时,由目标子类处理所述快速滑动事件。
16.其中,所述处理滑动事件的方法,还包括:
17.重写所述自定义类的嵌套滚动方法,设定当所述自定义类处理不完所述滑动事件时,由所述自定义类处理第一部分所述滑动事件,由所述目标子类处理第二部分滑动事件。
18.其中,所述获取所述自定义类的父布局高度,根据所述父布局高度设定目标子类的子布局高度的步骤,包括:
19.重写所述自定义类的测量方法,在测量方法中指定目标子类的高度为所述父布局高度。
20.第二方面,本技术还提供一种处理滑动事件的装置,应用于安装于安卓操作系统的应用程序中,包括:
21.创建模块,用于创建自定义类,所述自定义类继承目标父类,并将所述自定义类设置为目标子类的父布局;
22.高度模块,用于获取所述自定义类的父布局高度,根据所述父布局高度设定目标子类的子布局高度,所述子布局高度不超过所述父布局高度;
23.滑动模块,用于检测到发生滑动事件时,由所述自定义类处理所述滑动事件,判断所述自定义类是否能够处理全部的所述滑动事件;若否,则由所述自定义类处理第一部分所述滑动实践,由所述目标子类处理第二部分滑动事件。
24.第三方面,本技术还提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如上所述的步骤。
25.第四方面,本技术还提供一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如上所述的步骤。
26.第五方面,本技术还提供一种处理滑动事件的系统,包括:网络附属存储设备和如上所述的电子设备,所述电子设备中安装有能够执行如上所述方法的步骤的应用程序。
27.采用本发明实施例,具有如下有益效果:
28.通过令自定义类继承目标父类,并将自定义类设置为目标子类的父布局,根据自定义类的父布局高度设定目标子类的子布局高度,这样可以解决目标子类的复用问题,当自定义类处理不完滑动事件时,由目标子类接着处理滑动事件的剩余部分,在自定义类和目标子类之间实现一种平滑的滑动切换机制,有效提升了滑动流畅度。
附图说明
29.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
30.其中:
31.图1是本发明提供的安卓系统中嵌套滑动方法的一实施例的流程示意图;
32.图2是本发明提供的令自定义类myscrollview继承nestedscrollview的代码示意图;
33.图3是本发明提供的自定义的mynestscorllview嵌套recycleview的一个实施例的代码示意图;
34.图4是本发明提供的指定recyclerview的高度为所述父布局高度的代码示意图;
35.图5是本发明提供的由recyclerview处理所述滑动事件的代码示意图;
36.图6是本发明提供的安卓系统中嵌套滑动方法的另一实施例的流程示意图;
37.图7是本发明提供的myscrollview处理不完fling事件时交给recyclerview处理的代码示意图;
38.图8是本发明提供的处理滑动事件的装置的一实施例的结构示意图;
39.图9是本发明提供的电子设备的内部结构示意图;
40.图10是本发明提供的处理滑动事件的系统的一实施例的结构示意图。
具体实施方式
41.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
42.请结合参阅图1,图1是本发明提供的安卓系统中嵌套滑动方法的一实施例的流程示意图。本发明提供的安卓系统中嵌套滑动方法包括如下步骤:
43.s101:创建自定义类,自定义类继承目标父类,并将自定义类设置为目标子类的父布局。
44.在一个具体的实施场景中,创建自定义类myscrollview,令myscrollview继承目标父类,目标父类为nestedscrollview。nestedscrollview是android提供的一个可以嵌套滚动的viewgroup,它继承自scrollview,可以实现在一个滚动视图中嵌套另一个可滚动的视图。nestedscrollview通过实现了nestedscrollingparent和nestedscrollingchild接口,nestedscrollingparent表示父视图,nestedscrollingchild表示子视图。通过nestedscrollingparent和nestedscrollingchild接口的协作,父视图可以获取子视图的滚动距离,从而对自身的滚动进行调整,实现内部和外部的滚动事件进行联动,并目支持嵌套滑动。使用nestedscrollview可以方便地实现滑动嵌套效果,例如在recyclerview中嵌套其他可滑动视图时,可以使用nestedscrollview来实现整体的滑动效果。
45.令自定义类myscrollview继承nestedscrollview是为了在nestedscrollview的基础上增强或修改一些功能,这样做可以更加灵活地控制滚动事件,而不必受限于nestedscrollview提供的默认行为。此外,自定义类还可以封装一些复杂的逻辑,使代码更易于维护和重用。请结合参阅图2,图2是本发明提供的令自定义类myscrollview继承nestedscrollview的代码示意图。
46.目标子类为recyclerview,recyclerview是一个android控件,专门用于显示大量数据的列表,为了提高性能和避免重复创建view,recyclerview使用了viewholder和adapter这两个概念。viewholder是一个保存着item视图中所有子视图引用的容器,这样在滑动过程中可以避免重复创建和findviewbyld查找视图,从而提高效率。adapter负责将数据绑定到viewholder上,同时也负责创建和回收viewholder。通过adapter的实现,
recyclerview才能够展示数据,并且支持各种复杂的布局和视图类型(例如多列,瀑布流等)的显示。
47.将自定义的myscrollview设置为recyclerview的父布局可以实现嵌套滚动,nestedscrollview内部包含了一个垂直方向的scrollview,因此继承了nestedscrollview的myscrollview可以支持recyclerview的嵌套滚动。请结合参阅图3,图3是本发明提供的自定义的mynestscorllview嵌套recycleview的一个实施例的代码示意图。
48.s102:获取自定义类的父布局高度,根据父布局高度设定目标子类的子布局高度,子布局高度不超过父布局高度。
49.在一个具体的实施场景中,获取自定义类myscrollview的视图高度作为父布局高度,根据父布局高度设定目标子类recyclerview的子布局高度,从而固定recyclerview的视图的高度。子布局高度不超过父布局高度,这样在显示子视图时能够显示完全。
50.当myscrollview作为父布局时,会向recyclerview传递尺寸规格(measurespec)。measurespec包括三种模式:measurespec.exactly、measurespecat_most和measurespec.unspecified。其中,measurespec.unspecified表示对尺寸没有任何限制,子视图可以任意大小。当nestedscrollview作为recyclerview的父布局时,由于myscrollview(nestedscrollview)会将measurespec.unspecified传递给它的所有子布局,这导致了recyclerview的复用效果失效。因为recyclerview需要根据可见的item的数量和占用的空间来决定其实际的大小并进行复用,但是如果measurespec.unspecified传递下去,recyclerview无法确定自己的尺寸,就无法正确地计算item的数量和占用空间,从而导致复用效果失效。而在本技术中,将recyclerview的高度设置为固定值避免出现unspecified测量模式,这样就可以保证recyclerview的复用效果正常工作。
51.在一个实施场景中,可以定义子布局高度等于父布局高度,使得显示时的显示效果更加美观。此处不再定义子视图的宽度,子视图的宽度和父视图的宽度都是在布局文件里已经定义好了沾满屏幕。
52.在一个实施场景中,重写自定义类的测量方法,测量方法可以是onmeasure方法,在onmeasure方法中指定recyclerview的高度为父布局高度。onmeasure方法用于测量视图的大小,重写onmeasure方法,可以通过遍历子视图,并调用子视图的measure方法来计算子视图的尺寸和尺寸规格(measurespec)。然后根据子视图的尺寸和布局参数,以及视图自身的特性(例如padding),来计算父视图的实际尺寸,并将measurespec.exactly传递给子视图,固定子视图高度为父视图高度,从而避免unspecified测量模式导致的recyclerview复用问题。
53.通常情况下,recyclerview会对其子视图进行回收和复用。当用户向上滑动recyclerview时,底部的子视图会被回收,并被移至顶部重新显示,这样可以有效地节省内存和提高性能。但是,在某些情况下,如果不设置recyclerview的高度,比如嵌套在myscrollview或nestedscrollview中时,recyclerview里面的子项(item)可能会因为计算高度问题而不显示或者看起来消失了。
54.因此,在自定义类myscrollview中重写onmeasure方法,并在其中设置recyclerview的高度为myscrolview的高度,以保证每个子项的高度正确计算并正常显示。这样就可以避免因为复用问题导致的子项消失问题。这样,即使recyclerview中的item数
量很多,也能够通过滚动来完全显示所有的item,避免了item无法显示或者出现滑动问题的情况。请结合参阅图4,图4是本发明提供的指定recyclerview的高度为父布局高度的代码示意图。
55.s103:检测到发生滑动事件时,由自定义类处理滑动事件,判断自定义类是否能够处理全部的滑动事件。若否,执行步骤s104。
56.在一个具体的实施场景中,android中可以通过gesturedetector类或者ontouchlistener接口来检测滑动事件。当检测到滑动事件时,由自定义类myscrollview处理滑动事件,再判断是否还有未处理完的滑动事件。例如,可以使用getscrolly()方法获取myscrollview当前的滚动位置,然后再使用computeverticalscrollrange()方法获取myscrollview垂直方向上的滚动范围。如果滚动位置加上父视图高度等于滚动范围,则表示当前已经滑动到了底部,myscrollview无法再向下滚动了,则可以判定myscrollview不能够完全处理滑动事件。
57.s104:由自定义类处理第一部分滑动事件,由目标子类处理第二部分滑动事件。
58.在一个具体的实施场景中,当myscrollview处理不完滑动事件时,由myscrollview处理第一部分滑动事件,由recyclerview处理第二部分滑动事件。第一部分滑动事件和第二部分滑动事件能够合并为一个完整的滑动事件,可以依据myscrollview所能处理滑动事件的能力将完整的滑动事件划分为第一部分滑动事件和第二部分滑动事件。
59.先由myscrollview先处理第一部分滑动事件,再由recyclerview处理第二部分滑动事件。请结合参阅图5,图5是本发明提供的由recyclerview处理滑动事件的代码示意图。在myscrollview处理尽可能多的滑动事件的前提下,将剩余的滑动事件交给recyclerview进行处理。
60.由于recyclerview在前述步骤中被指定了高度,解决了复用问题,因此recyclerview接着处理第二部分滑动事件中的剩余部分不会出现显示不全的问题。这样可以在myscrollview和recyclerview之间实现一种平滑的滑动切换机制,避免了因为滑动事件被拦截而出现卡顿或者滑动不流畅的情况,从而改善了用户的使用体验。
61.在一个实施场景中,可以提前重写myscrollview的嵌套滚动方法,嵌套滚动方法可以是onnestedprescroll方法,设定当myscrollview处理不完滑动事件时,由recyclerview处理滑动事件。onnestedprescroll方法是android中view的一个方法,用于在嵌套滑动场景下处理前置滑动事件。在嵌套滑动场景中,一个视图内包含了多个可滑动的子视图(例如recyclerview),需要通过协作处理前置滑动事件,以实现整体的滑动效果。
62.当用户进行滑动操作时,myscrollview会先处理滑动事件,完成第一部分滑动事件,并将剩余的第二部分滑动事件传递给recyclerview进行处理。在这个过程中,就需要使用到onnestedprescroll方法,对前置滑动事件进行处理。在onnestedprescroll方法中,可以根据传入的dx和dy参数,以及myscrollview和recyclerview的滑动情况,判断当前是否需要处理滑动事件,并进行相应的处理。如果处理完能够处理完成的滑动事件后还有剩余的滑动事件未处理,可以将其传递给recyclerview进行处理,以实现整体的滑动效果。
63.具体地说,onnestedprescrol方法是在用户手指在myscrollview滑动时触发的,用于监听myscrollview的滑动事件,并在滑动到底部时将剩余的滑动距离交给recyclerview处理。这样可以实现整个布局的连续滑动效果。
64.在其他实施场景中,myscrollview能够处理完成全部的滑动事件,则由myscrollview处理整个滑动事件。
65.通过上述描述可知,在本实施例中,自定义类myscrollview继承目标子类nestedscrollview,并将自定义类myscrollview设置为目标子类recyclerview的父布局,根据自定义类myscrollview的父布局高度设定目标子类recyclerview的子布局高度可以解决目标子类recyclerview的复用问题,当自定义类myscrollview处理不完滑动事件时,由目标子类recyclerview接着处理滑动事件的剩余部分,在自定义类myscrollview和目标子类recyclerview之间实现一种平滑的滑动切换机制,有效提升了滑动流畅度。
66.请结合参阅图6,图6是本发明提供的安卓系统中嵌套滑动方法的另一实施例的流程示意图。本发明提供的安卓系统中嵌套滑动方法包括如下步骤:
67.s201:创建自定义类,自定义类继承目标父类,并将自定义类设置为目标子类的父布局。
68.s202:获取自定义类的父布局高度,根据父布局高度设定目标子类的子布局高度,子布局高度不超过父布局高度。
69.在一个具体的实施场景中,步骤s201-s202与本发明提供的安卓系统中嵌套滑动方法的一实施例中的步骤s101-s102基本一致,此处不再进行赘述。
70.s203:检测到发生滑动事件时,判断滑动事件是否为快速滑动事件,若是,执行步骤s204,若否,执行步骤s206。
71.在一个具体的实施场景中,android系统在检测用户手势时,首先会判断当前手势是否为滑动操作(即是否为move事件),如果是则进一步判断是否为快速滑动操作(即是否为fling事件)。android中可以通过gesturedetector类来检测用户的滑动手势,其中onfling方法可以判断当前手势是否为fling(快速滑动)操作。
72.s204:由自定义类处理快速滑动事件,判断自定义类是否能够处理全部的快速滑动事件,若否,执行步骤s205或步骤s206。
73.在一个具体的实施场景中,滑动事件为快速滑动事件,由myscrollview处理快速滑动事件,通过mscroller判断myscrollview是否能够处理完成快速滑动事件。mscroller是android中用于计算和处理滚动位置和速度的工具类。
74.mscroller可以帮助实现nestedscrolview(myscrollview)和recyclerview之间的滑动协作。在处理不完整的快速滑动事件(fling事件)时,需要结合mscroller来实现流畅的滑动效果。具体来说,当用户进行快速滑动操作时,会触发fling事件。此时,如果myscrollview无法完全处理该fling事件,就需要将剩余的fling事件交给recyclerview继续处理。而在这个过程中,可以使用mscroller来计算每一顿的滑动距离和时间,以实现流畅的滑动效果。
75.在嵌套滑动场景下,mscroller和fling事件通常是一起使用的。mscroller通过计算出每一顿的滑动距离和时间,控制myscrollview和recyclerview的滑动效果,而fling事件则触发了快速滑动操作,提高了滑动效率,并将剩余事件传递给recyclerview进行处理,从而保证整体的滑动效果。
76.s205:由自定义类处理第一部分快速滑动事件,由目标子类处理第二部分快速滑动事件。
77.在一个具体的实施场景中,当myscrollview处理不完全部的快速滑动事件时,由myscrollview处理第一部分快速滑动事件,由recyclerview接着处理快速滑动事件中的第二部分快速滑动事件。第一部分快速滑动事件和第二部分快速滑动事件能够合并为一个完整的滑动事件,可以依据myscrollview所能处理快速滑动事件的能力将完整的快速滑动事件划分为第一部分快速滑动事件和第二部分快速滑动事件。
78.由于recyclerview在前述步骤中被指定了高度,解决了复用问题,因此recyclerview接着处理快速滑动事件中的剩余部分不会出现显示不全的问题。
79.mscroller是一个滚动计算器,用于帮助nestedscrolview(myscrollview)和recyclerview之间的滑动协作。在处理不完整的fling事件时,需要结合mscroller来实现流畅的滑动效果。具体来说,当用户进行快速滑动操作时,会触发fling事件。此时,如果myscrollview无法完全处理该事件,就需要将剩余的事件交给recyclerview继续处理。而在这个过程中,可以使用mscroller来计算每一顿的滑动距离和时间,以实现流畅的滑动效果。
80.在嵌套滑动场景下,mscroller和fling事件通常是一起使用的。mscroller通过计算出每一顿的滑动距离和时间,控制myscrollview和recyclerview的滑动效果,而fling事件则触发了快速滑动操作,提高了滑动效率,并将剩余事件传递给recyclerview进行处理,从而保证整体的滑动效果。
81.在一个实施场景中,可以提前重写自定义类的快速滑动方法,快速滑动方法可以是fling方法,对原有的fling方法进行修改和扩展,以实现自定义的滑动行为和效果。fling方法用于处理快速滑动事件,包括手指从屏幕上迅速滑动以及惯性滚动等操作。在重写fling方法时设定当myscrollview处理不完快速滑动事件时,先由myscrollview处理第一部分快速滑动事件,再由recyclerview接着处理快速滑动事件中的第二部分快速滑动事件。
82.具体地说,fling方法是在用户进行快速滑动操作时触发的,用于处理快速滑动事件,并在myscrollview处理不完fling事件时将剩余的fling事件交给recyclerview处理。这样可以避免快速滑动卡顿的问题。请结合参阅图7,图7是本发明提供的myscrollview处理不完fling事件时交给recyclerview处理的代码示意图。
83.在另一个实施场景中,由myscrollview能够处理完成全部的快速滑动事件,则由myscrollview处理整个滑动事件。
84.s206:由目标子类和自定义类同步处理快速滑动事件。
85.在一个具体的实施场景中,当myscrollview处理不完全部的快速滑动事件时,由myscrollview和recyclerview同步处理快速滑动事件。
86.s207:由自定义类处理滑动事件,判断自定义类是否能够处理完成滑动事件,若否,执行步骤s208。
87.s208:由自定义类处理第一部分滑动事件,由目标子类处理第二部分滑动事件。
88.在一个具体的实施场景中,步骤s207-s208与本发明提供的安卓系统中嵌套滑动方法的一实施例中的步骤s103-s104基本一致,此处不再进行赘述。
89.通过上述描述可知,在本实施例中,自定义类myscrollview继承目标父类nestedscrollview,并将自定义类myscrollview设置为目标子类recyclerview的父布局,
根据自定义类myscrollview的父布局高度设定目标子类recyclerview的子布局高度可以解决目标子类recyclerview的复用问题,在自定义类myscrollview处理不完快速滑动事件时将剩余的快速滑动事件交给recyclerview处理,这样可以避免快速滑动卡顿的问题。
90.请参阅图8,图8是本发明提供的处理滑动事件的装置的一实施例的结构示意图,处理滑动事件的装置10包括创建模块11、高度模块12和滑动模块13。
91.创建模块11用于创建自定义类,自定义类继承目标父类,并将自定义类设置为目标子类的父布局;高度模块12用于获取自定义类的父布局高度,根据父布局高度设定目标子类的子布局高度,子布局高度不超过父布局高度;滑动模块13用于检测到发生滑动事件时,由自定义类处理滑动事件,判断自定义类是否能够处理全部的滑动事件;若否,则由自定义类处理第一部分滑动实践,由目标子类处理第二部分滑动事件。
92.滑动模块13还用于检测到发生滑动事件时,判断滑动事件是否为快速滑动事件,若滑动事件为快速滑动事件,由自定义类处理快速滑动事件,判断自定义类是否能够处理完成全部的快速滑动事件;若否,自定义类处理第一部分快速滑动事件,由目标子类处理第二部分快速滑动事件。
93.滑动模块13还用于当自定义类处理不完快速滑动事件时,由目标子类和自定义类同步处理快速滑动事件。
94.滑动模块13还用于重写自定义类的快速滑动方法,设定当自定义类处理不完快速滑动事件时,由目标子类处理快速滑动事件。
95.滑动模块13还用于重写自定义类的嵌套滚动方法,设定当自定义类处理不完滑动事件时,由自定义类处理第一部分滑动事件,由目标子类处理第二部分滑动事件。
96.高度模块12还用于重写自定义类的测量方法,在测量方法中指定目标子类的高度为父布局高度。
97.通过上述描述可知,在本实施例中,自定义类继承目标子类,并将自定义类设置为目标子类的父布局,根据自定义类的父布局高度设定目标子类的子布局高度可以解决目标子类的复用问题,当自定义类处理不完滑动事件时,由目标子类接着处理滑动事件的剩余部分,在自定义类和目标子类之间实现一种平滑的滑动切换机制,有效提升了滑动流畅度。
98.图9示出了一个实施例中电子设备的内部结构示意图。该电子设备具体可以是终端,也可以是服务器。如图9所示,该电子设备包括通过系统总线连接的处理器、存储器和网络接口。其中,存储器包括非易失性存储介质和内存储器。该电子设备的非易失性存储介质存储有操作系统,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现年龄识别方法。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行年龄识别方法。本领域技术人员可以理解,图9中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
99.在一个实施例中,提出了一种电子设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行如上的步骤。
100.在一个实施例中,提出了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行如上的步骤。
101.请结合参阅图10,图10是本发明提供的处理滑动事件的系统的一实施例的结构示意图。
102.处理滑动事件的系统20包括上文所述的电子设备21和网络附属存储设备22,电子设备21中安装有能够执行上文中所述方法的步骤的应用程序。
103.区别于现有技术,本发明在myscrollview继承nestedscrollview,并将myscrollview设置为recyclerview的父布局,根据myscrollview的父布局高度设定recyclerview的子布局高度可以解决recyclerview的复用问题,当myscrollview处理不完滑动事件时,由recyclerview接着处理滑动事件的剩余部分,在myscrollview处理不完fling事件时将剩余的fling事件交给recyclerview处理,这样可以避免滑动和快速滑动卡顿的问题。
104.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
105.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
106.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本技术专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
技术特征:
1.一种处理滑动事件的方法,所述方法应用于安装于安卓操作系统的应用程序中,其特征在于,包括:创建自定义类,所述自定义类继承目标父类,并将所述自定义类设置为目标子类的父布局;获取所述自定义类的父布局高度,根据所述父布局高度设定所述目标子类的子布局高度,所述子布局高度不超过所述父布局高度;检测到发生滑动事件时,由所述自定义类处理所述滑动事件,判断所述自定义类是否能够处理全部的所述滑动事件;若否,则由所述自定义类处理第一部分所述滑动事件,由所述目标子类处理第二部分所述滑动事件。2.根据权利要求1所述的处理滑动事件的方法,其特征在于,所述由所述自定义类处理第一部分所述滑动事件的步骤之前,还包括:检测到发生滑动事件时,判断所述滑动事件是否为快速滑动事件,若所述滑动事件为快速滑动事件,由所述自定义类处理所述快速滑动事件,判断所述自定义类是否能够处理完成全部的所述快速滑动事件;若否,所述自定义类处理第一部分所述快速滑动事件,由所述目标子类处理第二部分所述快速滑动事件。3.根据权利要求2所述的安卓系统中嵌套滑动方法,其特征在于,所述判断所述自定义类是否能够处理完成所述快速滑动事件的步骤之后,包括:当所述自定义类处理不完所述快速滑动事件时,由所述目标子类和所述自定义类同步处理所述快速滑动事件。4.根据权利要求2所述的处理滑动事件的方法,其特征在于,所述处理滑动事件的方法,还包括:重写所述自定义类的快速滑动方法,设定当所述自定义类处理不完所述快速滑动事件时,由目标子类处理所述快速滑动事件。5.根据权利要求1所述的处理滑动事件的方法,其特征在于,所述处理滑动事件的方法,还包括:重写所述自定义类的嵌套滚动方法,设定当所述自定义类处理不完所述滑动事件时,由所述自定义类处理第一部分所述滑动事件,由所述目标子类处理第二部分滑动事件。6.根据权利要求1所述的处理滑动事件的方法,其特征在于,所述获取所述自定义类的父布局高度,根据所述父布局高度设定目标子类的子布局高度的步骤,包括:重写所述自定义类的测量方法,在测量方法中指定目标子类的高度为所述父布局高度。7.一种处理滑动事件的装置,应用于安装于安卓操作系统的应用程序中,其特征在于,包括:创建模块,用于创建自定义类,所述自定义类继承目标父类,并将所述自定义类设置为目标子类的父布局;高度模块,用于获取所述自定义类的父布局高度,根据所述父布局高度设定目标子类的子布局高度,所述子布局高度不超过所述父布局高度;
滑动模块,用于检测到发生滑动事件时,由所述自定义类处理所述滑动事件,判断所述自定义类是否能够处理全部的所述滑动事件;若否,则由所述自定义类处理第一部分所述滑动实践,由所述目标子类处理第二部分滑动事件。8.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至6中任一项所述方法的步骤。9.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至6中任一项所述方法的步骤。10.一种处理滑动事件的系统,其特征在于,包括:网络附属存储设备和权利要求9所述的电子设备,所述电子设备中安装有能够执行权利要求1至6中任一项所述方法的步骤的应用程序。
技术总结
本发明涉及安卓系统开发技术领域。本发明公开了一种处理滑动事件的方法、装置、设备、介质和系统。处理滑动事件的方法包括:创建自定义类,自定义类继承目标父类,并将自定义类设置为目标子类的父布局;获取自定义类的父布局高度,根据父布局高度设定目标子类的子布局高度,子布局高度不超过父布局高度;检测到发生滑动事件时,由自定义类处理滑动事件,判断自定义类是否能够处理完成滑动事件;当自定义类处理不完滑动事件时,由自定义类处理第一部分滑动事件,由目标子类处理第二部分滑动事件。本发明能够有效解决安卓系统中滑动卡顿的问题。题。题。
技术研发人员:张清森 陈俊灵 林桂生
受保护的技术使用者:深圳市绿联科技股份有限公司
技术研发日:2023.05.09
技术公布日:2023/8/28
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/