CN116185323B - 一种无限循环滚动显示方法、装置、存储介质及系统 - Google Patents

一种无限循环滚动显示方法、装置、存储介质及系统 Download PDF

Info

Publication number
CN116185323B
CN116185323B CN202310136862.6A CN202310136862A CN116185323B CN 116185323 B CN116185323 B CN 116185323B CN 202310136862 A CN202310136862 A CN 202310136862A CN 116185323 B CN116185323 B CN 116185323B
Authority
CN
China
Prior art keywords
displayed
display
view
scrolling
views
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202310136862.6A
Other languages
English (en)
Other versions
CN116185323A (zh
Inventor
戎轩平
林俊杰
詹楚伟
张常华
朱正辉
赵定金
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Baolun Electronics Co ltd
Original Assignee
Guangdong Baolun Electronics Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangdong Baolun Electronics Co ltd filed Critical Guangdong Baolun Electronics Co ltd
Priority to CN202310136862.6A priority Critical patent/CN116185323B/zh
Publication of CN116185323A publication Critical patent/CN116185323A/zh
Application granted granted Critical
Publication of CN116185323B publication Critical patent/CN116185323B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • G06F3/1407General aspects irrespective of display type, e.g. determination of decimal point position, display with fixed or driving decimal point, suppression of non-significant zeros

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • User Interface Of Digital Computer (AREA)
  • Controls And Circuits For Display Device (AREA)

Abstract

本发明公开了一种无限循环滚动显示方法、装置、存储介质以及系统,通过更新显示位置,将多个第一视图中的末尾和首个的第一视图的显示顺序依次连接,从而循环滚动播放多个第一视图,该显示方法、装置、计算机可读存储介质以及系统实现了循环滚动显示的永久性;进一步地,本发明提供的一种无限循环滚动显示方法、装置、存储介质以及系统还通过在无限循环滚动显示前判断待显示视图是否首次加载,并在首次加载时等到待显示视图渲染完毕再获取第一展示信息尺寸以进行后续无限滚动显示,从而提升了无限循环滚动显示的功能稳定性。

Description

一种无限循环滚动显示方法、装置、存储介质及系统
技术领域
本发明涉及无限循环滚动显示技术领域,尤其涉及一种无限循环滚动显示方法、装置、计算机可读存储介质及系统。
背景技术
目前越来越多的场所与商家开始使用了电子屏幕进行信息的宣传,例如:医院科室的医生信息也不再局限于主要的医护人员,更多的是面向大众展示整个科室的医疗团队信息,而由于显示屏幕的尺寸限制,循环滚动医护信息的效果正好能够很好的达到这一效果。
在现有技术中,使用ViewPager组件,调用其适配器的getCount方法返回整形类型的最大值,对ViewPager的页号进行求余处理循环得到一组数据的内容,从而达到可以手动循环滚动的效果。
但是,现有技术仍存在如下缺陷:1、现有技术的循环滚动显示有时效限制;2、当展示的信息超过屏幕宽度时仍需要手动循环滚动;3、增加性能开销,容易卡顿
因此,当前需要一种无限循环滚动显示方法、装置、计算机可读存储介质以及系统,从而克服现有技术中存在的上述缺陷。
发明内容
本发明实施例提供一种无限循环滚动显示方法、装置、计算机可读存储介质以及系统,从而实现循环滚动显示的永久性。
本发明一实施例提供一种无限循环滚动显示方法,所述显示方法包括:获取滚动数据组以及待显示视图;所述滚动数据组包括显示位置以及滚动方向;根据所述待显示视图以及所述滚动数据组,判断是否开启无限循环滚动;若是,则对所述待显示视图进行布局,得到第一待显示视图序列,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤;所述第一视图序列包括顺序排列的多个第一视图,以及各个第一视图所对应的第一位置。
作为上述方案的改进,所述显示方法还包括:判断所述待显示视图是否首次加载;若是,则调用ViewTreeObserver的addOnGlobalLayoutListener监听事件对所述待显示视图进行渲染事件监听,并等待所述待显示视图渲染完成后,获取所述待显示视图的第一展示信息尺寸;若否,直接获取所述待显示视图的第二展示信息尺寸。
作为上述方案的改进,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤,具体包括:从所述第一待显示序列中,获取与所述显示位置的值相同的第一位置所对应的第一视图;所述显示位置在初始时为0;将所述第一视图显示在信息展示区域,并判断所述显示位置的值是否等于循环位置值;所述循环位置值等于所述第一视图的个数减1;若不是,则将所述显示位置的值加1;若是,则将所述显示位置的值置0;重复上述步骤。
作为上述方案的改进,获取滚动数据组以及待显示信息,并根据所述待显示信息以及所述滚动数据组,判断是否开启无限循环滚动,具体包括:获取信息展示区域的区域尺寸以及展示信息尺寸,并根据所述区域尺寸以及所述展示信息尺寸计算最大显示个数;所述展示信息尺寸包括第一展示信息尺寸以及第二展示信息尺寸;获取所述待显示视图的信息个数,并比较所述信息个数和所述最大显示个数的大小关系;当所述信息个数大于所述最大显示个数时,确认开启无限循环滚动;否则,不开启无限循环滚动。
作为上述方案的改进,对所述待显示视图进行布局,得到第一待显示视图序列,具体包括:调用detachAndScrapAttachedViews方法将所述待显示视图分离放入scrap缓存中;遍历每一个待显示视图,根据待显示视图的position从scrap缓存中拿取待显示视图;调用addView方法将所述待显示视图添加到展示的视图中,并且调用measureChildWithMargins方法测量所述待显示视图的宽和高;根据所述宽和所述高对待显示视图进行布局,得到第一待显示视图序列。
本发明另一实施例对应提供了一种无限循环滚动显示装置,所述显示装置包括数据获取单元、循环判断单元以及滚动显示单元,其中,所述数据获取单元用于获取滚动数据组以及待显示视图;所述滚动数据组包括显示位置以及滚动方向;所述循环判断单元用于根据所述待显示视图以及所述滚动数据组,判断是否开启无限循环滚动;所述滚动显示单元用于对所述待显示视图进行布局,得到第一待显示视图序列,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤;所述第一视图序列包括顺序排列的多个第一视图,以及各个第一视图所对应的第一位置。
作为上述方案的改进,所述显示装置还包括尺寸获取单元,所述尺寸获取单元用于:判断所述待显示视图是否首次加载;若是,则调用ViewTreeObserver的addOnGlobalLayoutListener监听事件对所述待显示视图进行渲染事件监听,并等待所述待显示视图渲染完成后,获取所述待显示视图的第一展示信息尺寸;若否,直接获取所述待显示视图的第二展示信息尺寸。
作为上述方案的改进,所述滚动显示单元还用于:从所述第一待显示序列中,获取与所述显示位置的值相同的第一位置所对应的第一视图;所述显示位置在初始时为0;将所述第一视图显示在信息展示区域,并判断所述显示位置的值是否等于循环位置值;所述循环位置值等于所述第一视图的个数减1;若不是,则将所述显示位置的值加1;若是,则将所述显示位置的值置0;重复上述步骤。
作为上述方案的改进,所述循环判断单元还用于:获取信息展示区域的区域尺寸以及展示信息尺寸,并根据所述区域尺寸以及所述展示信息尺寸计算最大显示个数;所述展示信息尺寸包括第一展示信息尺寸以及第二展示信息尺寸;获取所述待显示视图的信息个数,并比较所述信息个数和所述最大显示个数的大小关系;当所述信息个数大于所述最大显示个数时,确认开启无限循环滚动;否则,不开启无限循环滚动。
作为上述方案的改进,所述滚动显示单元还用于:调用detachAndScrapAttachedViews方法将所述待显示视图分离放入scrap缓存中;遍历每一个待显示视图,根据待显示视图的position从scrap缓存中拿取待显示视图;调用addView方法将所述待显示视图添加到展示的视图中,并且调用measureChildWithMargins方法测量所述待显示视图的宽和高;根据所述宽和所述高对待显示视图进行布局,得到第一待显示视图序列。
本发明另一实施例提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如前所述的无限循环滚动显示方法。
本发明另一实施例提供了一种无限循环滚动显示系统,所述显示系统包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如前所述的无限循环滚动显示方法。
与现有技术相比,本技术方案存在如下有益效果:
本发明提供了一种无限循环滚动显示方法、装置、计算机可读存储介质以及系统,通过更新显示位置,将多个第一视图中的末尾和首个的第一视图的显示顺序依次连接,从而循环滚动播放多个第一视图,该显示方法、装置、计算机可读存储介质以及系统实现了循环滚动显示的永久性。
进一步地,本发明提供的一种无限循环滚动显示方法、装置、计算机可读存储介质以及系统还通过在无限循环滚动显示前判断待显示视图是否首次加载,并在首次加载时等到待显示视图渲染完毕再获取第一展示信息尺寸以进行后续无限滚动显示,从而提升了无限循环滚动显示的功能稳定性。
附图说明
图1是本发明一实施例提供的一种无限循环滚动显示方法的流程示意图;
图2是本发明一实施例提供的一种无限循环滚动显示装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
具体实施例一
本发明实施例首先描述了一种无限循环滚动显示方法。图1是本发明一实施例提供的一种无限循环滚动显示方法的流程示意图。
如图1所示,所述显示方法包括:
S1:获取滚动数据组以及待显示视图。
所述滚动数据组包括显示位置以及滚动方向。由于在实际应用中可能需要进行循环显示的方式包括水平循环滚动显示和垂直循环滚动显示,在一个实施例中,滚动方向包括向左、向右、向上和向下;其中,采用向左或向右的滚动方向能够实现水平循环滚动显示,采用向上或向下的滚动方向能够实现垂直循环滚动显示。
S2:根据所述待显示视图以及所述滚动数据组,判断是否开启无限循环滚动。
由于待显示视图的大小不同,并不是所有的待显示视图都需要进循环滚动显示,因此,首先对该待显示视图是否需要进行无限循环滚动显示进行判断:当待显示视图的尺寸超出信息展示区域的区域尺寸时,该待显示视图无法一次性完整显示,判断认为需要进行循环滚动显示以继续显示第一次未显示完整的剩余部分;而当待显示视图的尺寸未超出信息展示区域的区域尺寸时,直接创建继承于RecyclerView的自定义控件类,并用自定义控件实例设置LinearLayoutManager实例。
在一个实施例中,获取滚动数据组以及待显示信息,并根据所述待显示信息以及所述滚动数据组,判断是否开启无限循环滚动,具体包括:获取信息展示区域的区域尺寸以及展示信息尺寸,并根据所述区域尺寸以及所述展示信息尺寸计算最大显示个数;所述展示信息尺寸包括第一展示信息尺寸以及第二展示信息尺寸;获取所述待显示视图的信息个数,并比较所述信息个数和所述最大显示个数的大小关系;当所述信息个数大于所述最大显示个数时,确认开启无限循环滚动;否则,不开启无限循环滚动。
S3:若是,则对所述待显示视图进行布局,得到第一待显示视图序列,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤。
在一个实施例中,对所述待显示视图进行布局,得到第一待显示视图序列,具体包括:调用detachAndScrapAttachedViews方法将所述待显示视图分离放入scrap缓存中;遍历每一个待显示视图,根据待显示视图的position从scrap缓存中拿取待显示视图;调用addView方法将所述待显示视图添加到展示的视图中,并且调用measureChildWithMargins方法测量所述待显示视图的宽和高;根据所述宽和所述高对待显示视图进行布局,得到第一待显示视图序列。
所述第一视图序列包括顺序排列的多个第一视图,以及各个第一视图所对应的第一位置。
为了能实现无限循环滚动显示,本发明实施例将第一待显示视图序列的末尾第一视图和首个第一视图进行显示顺序连接,以使当显示完第一待显示视图序列中的末尾的第一视图后,显示位置的值被置零以重新从第一待显示视图序列的首个第一视图开始显示。具体地,在一个实施例中,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤,具体包括:从所述第一待显示序列中,获取与所述显示位置的值相同的第一位置所对应的第一视图;所述显示位置在初始时为0;将所述第一视图显示在信息展示区域,并判断所述显示位置的值是否等于循环位置值;所述循环位置值等于所述第一视图的个数减1;若不是,则将所述显示位置的值加1;若是,则将所述显示位置的值置0;重复上述步骤。
为了减少内存占用,在一个实施例中,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤,还包括:调用recyclerHideView方法,回收已经显示过的第一视图。
在一个实施例中,recyclerHideView方法具体包括:首先,遍历可见的item视图,声明一个视图类型的变量,拿到每次遍历的视图,然后通过传入的dx是否大于0判断向左滑动还是向右滑动;若向左滑动,调用removeAndRecycleView方法移除变量的getRight值小于0的item视图;若向右滑动,调用removeAndRecycleView方法移除变量的getLeft值大于展示区域总宽度的item视图。
为了避免程序崩溃,在判断认为需要进行循环滚动显示并进行执行之前,需要确保该待显示视图已经不是首次渲染加载,否则则需要对待显示视图的渲染事件进行监听,并在监听到待显示视图渲染结束后获取第一展示信息尺寸。在一个实施例中,所述显示方法还包括:判断所述待显示视图是否首次加载;若是,则调用ViewTreeObserver的addOnGlobalLayoutListener监听事件对所述待显示视图进行渲染事件监听,并等待所述待显示视图渲染完成后,获取所述待显示视图的第一展示信息尺寸;若否,直接获取所述待显示视图的第二展示信息尺寸。
其中,由于滚动方向的不同,所需要获取的尺寸参数也不同,具体地,当滚动方向为向左或向右时,所述待显示视图水平滚动,此时应获取所述待显示视图的宽度以作为第一展示信息尺寸或第二展示信息尺寸;而当滚动方向为向上或向下时,所述待显示视图垂直滚动,此时应获取所述待显示视图的高度以作为第一展示信息尺寸或第二展示信息尺寸。
本发明实施例描述了一种无限循环滚动显示方法,通过更新显示位置,将多个第一视图中的末尾和首个的第一视图的显示顺序依次连接,从而循环滚动播放多个第一视图,该显示方法实现了循环滚动显示的永久性;进一步地,本发明实施例描述的一种无限循环滚动显示方法还通过在无限循环滚动显示前判断待显示视图是否首次加载,并在首次加载时等到待显示视图渲染完毕再获取第一展示信息尺寸以进行后续无限滚动显示,从而提升了无限循环滚动显示的功能稳定性。
具体实施例二
除上述方法外,本发明实施例还公开了一种无限循环滚动显示装置。图2是本发明一实施例提供的一种无限循环滚动显示装置的结构示意图。
如图2所示,所述显示装置包括数据获取单元11、循环判断单元12以及滚动显示单元13。
其中,数据获取单元11用于获取滚动数据组以及待显示视图;所述滚动数据组包括显示位置以及滚动方向。
循环判断单元12用于根据所述待显示视图以及所述滚动数据组,判断是否开启无限循环滚动。
在一个实施例中,所述循环判断单元12还用于:获取信息展示区域的区域尺寸以及展示信息尺寸,并根据所述区域尺寸以及所述展示信息尺寸计算最大显示个数;所述展示信息尺寸包括第一展示信息尺寸以及第二展示信息尺寸;获取所述待显示视图的信息个数,并比较所述信息个数和所述最大显示个数的大小关系;当所述信息个数大于所述最大显示个数时,确认开启无限循环滚动;否则,不开启无限循环滚动。
滚动显示单元13用于对所述待显示视图进行布局,得到第一待显示视图序列,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤。所述第一视图序列包括顺序排列的多个第一视图,以及各个第一视图所对应的第一位置。
在一个实施例中,所述滚动显示单元13还用于:从所述第一待显示序列中,获取与所述显示位置的值相同的第一位置所对应的第一视图;所述显示位置在初始时为0;将所述第一视图显示在信息展示区域,并判断所述显示位置的值是否等于循环位置值;所述循环位置值等于所述第一视图的个数减1;若不是,则将所述显示位置的值加1;若是,则将所述显示位置的值置0;重复上述步骤。
在一个实施例中,所述滚动显示单元13还用于:调用detachAndScrapAttachedViews方法将所述待显示视图分离放入scrap缓存中;遍历每一个待显示视图,根据待显示视图的position从scrap缓存中拿取待显示视图;调用addView方法将所述待显示视图添加到展示的视图中,并且调用measureChildWithMargins方法测量所述待显示视图的宽和高;根据所述宽和所述高对待显示视图进行布局,得到第一待显示视图序列。
在一个实施例中,所述显示装置还包括尺寸获取单元,所述尺寸获取单元用于:判断所述待显示视图是否首次加载;若是,则调用ViewTreeObserver的addOnGlobalLayoutListener监听事件对所述待显示视图进行渲染事件监听,并等待所述待显示视图渲染完成后,获取所述待显示视图的第一展示信息尺寸;若否,直接获取所述待显示视图的第二展示信息尺寸。
其中,所述显示装置集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。本发明另一实施例提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如前所述的无限循环滚动显示方法。
其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random AccessMemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,单元之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
本发明实施例描述了一种无限循环滚动显示装置及计算机可读存储介质,通过更新显示位置,将多个第一视图中的末尾和首个的第一视图的显示顺序依次连接,从而循环滚动播放多个第一视图,该显示装置及计算机可读存储介质实现了循环滚动显示的永久性;进一步地,本发明实施例描述的一种无限循环滚动显示装置及计算机可读存储介质还通过在无限循环滚动显示前判断待显示视图是否首次加载,并在首次加载时等到待显示视图渲染完毕再获取第一展示信息尺寸以进行后续无限滚动显示,从而提升了无限循环滚动显示的功能稳定性。
具体实施例三
除上述方法和装置外,本发明实施例还描述了一种无限循环滚动显示系统。
所述显示系统包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如前所述的无限循环滚动显示方法。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述装置的控制中心,利用各种接口和线路连接整个装置的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(FlashCard)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
为了进一步描述本发明的技术方案,此处以水平循环滚动显示(滚动方向为向左或向右,所需要获取的尺寸为宽度)为例,示例性但不限制性地对本技术方案的实际应用进行说明。
具体地,实施步骤如下:
步骤1:创建继承于RecyclerView的自定义控件类,添加一个静态常量,用于控制每次滚动间隔的时间;
步骤2:在自定义控件类中创建一个继承于Runnable的滚动线程类,重写run方法调用RecyclerView的scrollBy方法,设置每次滚动的dx,dy值;
步骤3:在自定义控件类中编写start方法,用于控制滚动线程的运行;
步骤4:在自定义控件类中重写onTouchEvent方法,通过触摸事件的不同控制滚动线程的继续与停止,使得屏幕视图可以通过触摸左右滑动;
步骤5:创建继承于RecyclerView.Adapter的自定义适配器,添加一个装有自定义Bean的集合,为视图的绑定提供数据,创建继承于RecyclerView.ViewHolder的自定义ViewHolder类,在其构造方法中,初始化视图的各个子控件;
步骤6:在自定义适配器中,重写onCreateViewHolder方法,返回自定义ViewHolder类的实例,创建展示信息的视图;
步骤7:在自定义适配器中,重写onBindViewHolder方法,从步骤5中的集合拿取对应position值的Bean实例,然后绑定数据到视图中;
步骤8:在自定义适配中,重写getItemCount方法,返回步骤5中集合的元素个数;
步骤9:创建继承于LinearLayoutManager的自定义布局管理器,重写它的generateDefaultLayoutParams方法为item视图设置默认的布局参数wrap_content,此参数使得item获取视图大小的时候模式为自身需要多少,父布局就给多少;
步骤10:在自定义布局管理器中,重写线性布局管理器的canScrollHorizontally方法返回true,打开水平滑动的开关;
步骤11:在自定义布局管理器中,重写线性布局管理器的onLayoutChildren方法,在其内部,首先调用detachAndScrapAttachedViews方法将item视图分离放入scrap缓存中,以准备重新对view排版;
步骤12:声明一个整形类型的变量,用于记录此时布局的item视图的总宽度;
步骤13:创建继承于AppCompatActivty的MainActivity类,重写onCreate方法,在其内部,编写根据展示的信息个数判断是否进行视图的无限循环滚动;
其中,步骤13具体包括:首先,为步骤1中的自定义控件实例设置步骤5中的自定义适配器实例,在调用判断展示信息是否超过屏幕宽度的方法之前,要先判断视图是否为首次加载;若是首次加载,需要调用ViewTreeObserver的addOnGlobalLayoutListener监听事件,来获取视图渲染完成后的控件宽度;通过减去内外边距的大小来获取展示信息区域的宽度,同时获取一个信息所占的宽度,每个信息的宽度都是相同的,通过展示信息区域的宽度除以一个信息所占的宽度得到未超出屏幕时最大展示信息的个数;当展示信息的个数超过最大展示个数时,为步骤1中的自定义控件实例设置步骤9中的自定义布局管理器实例,并且通过调用自定义控件实例的start方法开启滚动;当展示信息的个数未超过最大展示个数时,为步骤1中的自定义控件实例设置LinearLayoutManager实例;若不是首次加载,直接获取展示区域与一个信息的宽度,得到屏幕的最大展示个数,根据信息个数与最大展示个数的比较,判断是否开启无限循环滚动。
步骤14:遍历每一个item视图,根据position从scrap缓存中拿取item视图,调用addView方法将其添加到展示的视图中,并且调用measureChildWithMargins方法测量item视图的宽高,根据获取到的宽高布局item视图;
其中,在遍历过程中,每次需要判断步骤12中的变量是否超过了展示信息区域的宽度,若超过,则停止遍历,不再布局item视图,若未超过,继续遍历,布局item视图。
步骤15:在自定义布局管理器中,重写scrollHorizontallBy方法,声明一个整形类型的变量,用来记录水平方向可以滑动的距离;
步骤16:编写fill方法,在scrollHorizontallBy方法里,调用fill方法返回水平方向可以滑动的距离,通过传入的dx判断向左还是向右滑动,若dx>0,则为向左滑动,反之则为向右滑动;
步骤17:向左滑动,声明View类型的变量,用来获取可见的item视图的最后一个视图,当变量的getRight值小于展示区域的宽度值时,代表可见的最后一个item视图完全滑进来了,需要补充新的item视图;
步骤18:若步骤17中的变量的position值等于总item视图的个数减一,则此变量item视图为最后一个视图,此时再补充新的视图时,需要拿取的是position为0的item视图,这样就将绑定步骤5中集合数据的item视图重置,达到循环滚动的效果;
步骤19:若步骤17中的变量的position值不等于总item视图的个数减一,此时再补充新的视图时,需要拿取的是变量视图的下一个item视图;
步骤20:拿取到item视图后,通过调用addView方法添加视图,调用measureChildWithMargins方法测量item视图的宽高,调用layoutDecorated方法布局视图,最终返回水平方向可以滑动的距离;
步骤21:向右滑动,声明View类型的变量,用来获取可见的第一个item视图,当变量的getLeft值大于或等于0时,代表可见的第一个item视图完全滑进来了,需要补充新的item视图;
步骤22:若步骤21中的变量的position值等于0,则此变量item视图为第一个视图,此时再补充新的视图时,需要拿取的是position为getItemCount-1的item视图,这样就将绑定步骤5中集合数据的第一个item视图与最后一个item视图相接,达到循环滚动的效果;
步骤23:拿取到item视图后,与步骤21做相同的处理。
其中,在步骤15中的变量获取到fill方法返回的值后,调用offsetChildrenHorizontal方法,传入步骤15中的变量乘-1的值,对item视图进行整体的左右移动。
预先编写recyclerHideView方法,在循环滚动显示的过程中,在scrollHorizontallyBy方法里,调用recyclerHideView方法回收已经离开界面的item视图,减少内存的占用。
其中,recyclerHideView方法具体包括:首先,遍历可见的item视图,声明一个视图类型的变量,拿到每次遍历的视图,然后通过传入的dx是否大于0判断向左滑动还是向右滑动;若向左滑动,调用removeAndRecycleView方法移除变量的getRight值小于0的item视图;若向右滑动,调用removeAndRecycleView方法移除变量的getLeft值大于展示区域总宽度的item视图。
本发明实施例描述了一种无限循环滚动显示系统,通过更新显示位置,将多个第一视图中的末尾和首个的第一视图的显示顺序依次连接,从而循环滚动播放多个第一视图,该显示系统实现了循环滚动显示的永久性;进一步地,本发明实施例描述的一种无限循环滚动显示系统还通过在无限循环滚动显示前判断待显示视图是否首次加载,并在首次加载时等到待显示视图渲染完毕再获取第一展示信息尺寸以进行后续无限滚动显示,从而提升了无限循环滚动显示的功能稳定性。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

Claims (7)

1.一种无限循环滚动显示方法,其特征在于,所述显示方法包括:
获取滚动数据组以及待显示视图;所述滚动数据组包括显示位置以及滚动方向;
根据所述待显示视图以及所述滚动数据组,判断是否开启无限循环滚动;
若是,则对所述待显示视图进行布局,得到第一待显示视图序列,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤;所述第一待显示视图序列包括顺序排列的多个第一视图,以及各个第一视图所对应的第一位置;
所述显示方法还包括:
判断所述待显示视图是否首次加载;
若是,则调用ViewTreeObserver的addOnGlobalLayoutListener监听事件对所述待显示视图进行渲染事件监听,并等待所述待显示视图渲染完成后,获取所述待显示视图的第一展示信息尺寸;
若否,直接获取所述待显示视图的第二展示信息尺寸;
获取滚动数据组以及待显示信息,并根据所述待显示信息以及所述滚动数据组,判断是否开启无限循环滚动,具体包括:
获取信息展示区域的区域尺寸以及展示信息尺寸,并根据所述区域尺寸以及所述展示信息尺寸计算最大显示个数;所述展示信息尺寸包括第一展示信息尺寸以及第二展示信息尺寸;
获取所述待显示视图的信息个数,并比较所述信息个数和所述最大显示个数的大小关系;
当所述信息个数大于所述最大显示个数时,确认开启无限循环滚动;
否则,不开启无限循环滚动。
2.根据权利要求1所述的无限循环滚动显示方法,其特征在于,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤,具体包括:
从所述第一待显示视图序列中,获取与所述显示位置的值相同的第一位置所对应的第一视图;所述显示位置在初始时为0;
将所述第一视图显示在信息展示区域,并判断所述显示位置的值是否等于循环位置值;所述循环位置值等于所述第一视图的个数减1;
若不是,则将所述显示位置的值加1;
若是,则将所述显示位置的值置0;
重复上述步骤。
3.根据权利要求1所述的无限循环滚动显示方法,其特征在于,对所述待显示视图进行布局,得到第一待显示视图序列,具体包括:
调用detachAndScrapAttachedViews方法将所述待显示视图分离放入scrap缓存中;
遍历每一个待显示视图,根据待显示视图的position从scrap缓存中拿取待显示视图;
调用addView方法将所述待显示视图添加到展示的视图中,并且调用measureChildWithMargins方法测量所述待显示视图的宽和高;
根据所述宽和所述高对待显示视图进行布局,得到第一待显示视图序列。
4.一种无限循环滚动显示装置,其特征在于,所述显示装置包括数据获取单元、循环判断单元以及滚动显示单元,其中,
所述数据获取单元用于获取滚动数据组以及待显示视图;所述滚动数据组包括显示位置以及滚动方向;
所述循环判断单元用于根据所述待显示视图以及所述滚动数据组,判断是否开启无限循环滚动;
所述滚动显示单元用于对所述待显示视图进行布局,得到第一待显示视图序列,根据所述显示位置和第一位置,以所述滚动方向依次显示第一视图,在所述第一待显示视图序列全部显示一遍后,将所述显示位置的值置零并重复本步骤;所述第一待显示视图序列包括顺序排列的多个第一视图,以及各个第一视图所对应的第一位置;
所述显示装置还包括尺寸获取单元,所述尺寸获取单元用于:
判断所述待显示视图是否首次加载;
若是,则调用ViewTreeObserver的addOnGlobalLayoutListener监听事件对所述待显示视图进行渲染事件监听,并等待所述待显示视图渲染完成后,获取所述待显示视图的第一展示信息尺寸;
若否,直接获取所述待显示视图的第二展示信息尺寸;
所述循环判断单元还用于:获取信息展示区域的区域尺寸以及展示信息尺寸,并根据所述区域尺寸以及所述展示信息尺寸计算最大显示个数;所述展示信息尺寸包括第一展示信息尺寸以及第二展示信息尺寸;获取所述待显示视图的信息个数,并比较所述信息个数和所述最大显示个数的大小关系;当所述信息个数大于所述最大显示个数时,确认开启无限循环滚动;否则,不开启无限循环滚动。
5.根据权利要求4所述的无限循环滚动显示装置,其特征在于,所述滚动显示单元还用于:
从所述第一待显示视图序列中,获取与所述显示位置的值相同的第一位置所对应的第一视图;所述显示位置在初始时为0;
将所述第一视图显示在信息展示区域,并判断所述显示位置的值是否等于循环位置值;所述循环位置值等于所述第一视图的个数减1;
若不是,则将所述显示位置的值加1;
若是,则将所述显示位置的值置0;
重复上述步骤。
6.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在设备执行如权利要求1至3中任意一项所述的无限循环滚动显示方法。
7.一种无限循环滚动显示系统,其特征在于,所述显示系统包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至3中任意一项所述的无限循环滚动显示方法。
CN202310136862.6A 2023-02-17 2023-02-17 一种无限循环滚动显示方法、装置、存储介质及系统 Active CN116185323B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310136862.6A CN116185323B (zh) 2023-02-17 2023-02-17 一种无限循环滚动显示方法、装置、存储介质及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310136862.6A CN116185323B (zh) 2023-02-17 2023-02-17 一种无限循环滚动显示方法、装置、存储介质及系统

Publications (2)

Publication Number Publication Date
CN116185323A CN116185323A (zh) 2023-05-30
CN116185323B true CN116185323B (zh) 2024-03-08

Family

ID=86451952

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310136862.6A Active CN116185323B (zh) 2023-02-17 2023-02-17 一种无限循环滚动显示方法、装置、存储介质及系统

Country Status (1)

Country Link
CN (1) CN116185323B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648356A (zh) * 2016-11-16 2017-05-10 西安诺瓦电子科技有限公司 基于Android平台的走马灯效果实现装置及方法
CN109992188A (zh) * 2018-01-02 2019-07-09 武汉斗鱼网络科技有限公司 一种iOS移动端文本滚动显示的实现方法及装置
CN114020938A (zh) * 2021-11-08 2022-02-08 深圳市杰和科技发展有限公司 循环滚动播放图片的方法、装置、显示设备及存储介质
CN114282135A (zh) * 2021-12-10 2022-04-05 北京卓越乐享网络科技有限公司 数据轮播方法、装置、电子设备及存储介质
CN114547495A (zh) * 2022-01-26 2022-05-27 深圳联想懂的通信有限公司 一种页面加载方法、装置、设备及可读存储介质
CN115269077A (zh) * 2022-07-12 2022-11-01 北京齐尔布莱特科技有限公司 一种图片显示方法、模块、移动终端及存储介质
CN115329226A (zh) * 2022-07-06 2022-11-11 广东艾矽易信息科技有限公司 实现网页信息无缝滚动的处理方法、装置、设备及介质
CN115421641A (zh) * 2022-08-31 2022-12-02 重庆长安汽车股份有限公司 一种android卡片横移的特效动画方法及其实现装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8700999B2 (en) * 2011-08-15 2014-04-15 Google Inc. Carousel user interface for document management

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106648356A (zh) * 2016-11-16 2017-05-10 西安诺瓦电子科技有限公司 基于Android平台的走马灯效果实现装置及方法
CN109992188A (zh) * 2018-01-02 2019-07-09 武汉斗鱼网络科技有限公司 一种iOS移动端文本滚动显示的实现方法及装置
CN114020938A (zh) * 2021-11-08 2022-02-08 深圳市杰和科技发展有限公司 循环滚动播放图片的方法、装置、显示设备及存储介质
CN114282135A (zh) * 2021-12-10 2022-04-05 北京卓越乐享网络科技有限公司 数据轮播方法、装置、电子设备及存储介质
CN114547495A (zh) * 2022-01-26 2022-05-27 深圳联想懂的通信有限公司 一种页面加载方法、装置、设备及可读存储介质
CN115329226A (zh) * 2022-07-06 2022-11-11 广东艾矽易信息科技有限公司 实现网页信息无缝滚动的处理方法、装置、设备及介质
CN115269077A (zh) * 2022-07-12 2022-11-01 北京齐尔布莱特科技有限公司 一种图片显示方法、模块、移动终端及存储介质
CN115421641A (zh) * 2022-08-31 2022-12-02 重庆长安汽车股份有限公司 一种android卡片横移的特效动画方法及其实现装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Characterizing and Detecting Inefficient Image Displaying Issues in Android Apps";Wenjie Li 等;《IEEE》;20190318;第355-365页 *
"基于Android的音乐播放器设计与实现";贺钊;《中国优秀硕士学位论文全文数据库(信息科技辑)》;20220515(第2022年第05期);第I138-462页正文第41-52段 *

Also Published As

Publication number Publication date
CN116185323A (zh) 2023-05-30

Similar Documents

Publication Publication Date Title
CN111589163B (zh) 排行榜的处理方法、终端设备、服务器及存储介质
CN111443914B (zh) 动画展示方法以及装置
JP2018029986A (ja) 情報処理装置
CN110647378A (zh) 动态图像的加载方法、装置和电子设备
CN116185323B (zh) 一种无限循环滚动显示方法、装置、存储介质及系统
CN111813300A (zh) 一种屏幕截图方法及装置
CN113741753A (zh) 撤销方法、电子设备、存储介质及计算机程序产品
CN113535294A (zh) 一种h5列表的渲染加速方法、装置、设备和介质
JP6345163B2 (ja) 情報処理装置及びプログラム
CN108664301B (zh) 一种菜单的生成方法、系统及终端设备
CN110597432B (zh) 界面控制方法、装置、计算机可读介质及电子设备
CN110677586B (zh) 图像显示方法、图像显示装置及移动终端
CN115239845A (zh) 一种特效配置文件的生成方法、装置、设备及介质
CN112516594A (zh) 游戏中生命值的补充方法、装置及电子设备
CN111125466B (zh) 仪表盘布局方法及装置
CN111603757A (zh) 游戏中装备的处理方法、装置及设备
CN113891141B (zh) 一种视频处理方法、装置及设备
CN111290822B (zh) 一种桌面壁纸的显示方法、装置及计算机可读存储介质
CN114053706A (zh) 游戏界面的视角处理方法、装置、设备及存储介质
CN110990097A (zh) 一种ui界面生成方法、存储介质及智能终端
CN112596641A (zh) 图标调整方法、装置、电子设备及存储介质
CN112870713B (zh) 一种游戏界面的交互方法和装置
CN110955473A (zh) 显示加载提示信息的方法及装置
CN113286187B (zh) 一种视频加载播放方法、装置、设备及存储介质
WO2024098713A1 (zh) 终端桌面的显示方法、终端、计算机可读介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: No. 56 Nanli East Road, Shiqi Town, Panyu District, Guangzhou City, Guangdong Province, 510000

Applicant after: Guangdong Baolun Electronics Co.,Ltd.

Address before: No. 19, Chuangyuan Road, Zhongcun Street, Panyu District, Guangzhou City, Guangdong Province, 511495

Applicant before: GUANGZHOU ITC ELECTRONIC TECHNOLOGY Co.,Ltd.

GR01 Patent grant
GR01 Patent grant