CN110930496A - 视图绘制方法、装置、电子设备和存储介质 - Google Patents
视图绘制方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN110930496A CN110930496A CN201911133975.0A CN201911133975A CN110930496A CN 110930496 A CN110930496 A CN 110930496A CN 201911133975 A CN201911133975 A CN 201911133975A CN 110930496 A CN110930496 A CN 110930496A
- Authority
- CN
- China
- Prior art keywords
- view
- preset
- target view
- class
- base class
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/10—Geometric effects
- G06T15/20—Perspective computation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Geometry (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本公开关于视图绘制方法、装置、电子设备和存储介质,所述方法包括:创建继承自视图控件基类的预设基类,其中,预设基类具有实现视图绘制功能的接口;在需要绘制目标视图时,检测到预设基类具有实现视图绘制功能的接口,开启异步线程,异步线程基于预设基类创建位图的上下文,使目标视图的绘制操作在位图的上下文中异步进行;在目标视图的所述绘制操作完成后,将位图的上下文生成图片;通过主线程展示图片。本实施例在创建预设基类时,就设置预设基类具有实现视图绘制功能的接口,可以开启异步线程,并在异步线程位图的上下文异步执行对目标视图的绘制操作。并且创建的预设基类继承自视图控件基类,无需编程人员重新编码来构建绘制视图的逻辑。
Description
技术领域
本公开涉及图像处理技术领域,尤其涉及视图绘制方法,视图绘制装置,电子设备和存储介质。
背景技术
视图绘制功能是iOS系统中应用的基本功能,在iOS系统中,视图绘制操作主要在主线程执行,当视图比较复杂时,主线程会发生阻塞,从而导致应用程序卡顿,影响用户体验。
相关技术中为了克服上述问题,提出了将视图绘制操作转交给异步线程执行的方案,但是相关技术中视图绘制操作的流程和逻辑与iOS系统本身视图绘制操作的流程和逻辑差异很大,需要编程人员重新编写大量代码来实现,学习成本较高,兼容性也较差。
发明内容
本公开提供一种视图绘制方法,视图绘制装置,电子设备和存储介质,以至少解决相关技术中视图绘制兼容性较差,学习成本较高的技术问题。本公开的技术方案如下:
根据本公开实施例的第一方面,提出一种视图绘制方法,适用于终端,所述方法包括:
创建继承自视图控件基类的预设基类,其中,所述预设基类具有实现视图绘制功能的接口;
在需要绘制目标视图时,检测到所述预设基类具有实现视图绘制功能的接口,开启异步线程,所述异步线程基于所述预设基类创建位图的上下文,使所述目标视图的绘制操作在所述位图的上下文中异步进行,其中,所述异步线程为与所述终端的主线程不同的子线程;
在所述目标视图的所述绘制操作完成后,将所述位图的上下文生成图片;
通过所述主线程展示所述图片。
可选地,所述方法还包括:
创建继承自所述预设基类的第一子类,其中,所述第一子类支持在异步线程中进行绘制所述目标视图的操作,以及支持对所述目标视图点击的功能;和/或
创建继承自所述第一子类的第二子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示文字和图片的功能;和/或
创建继承自所述第一子类的第三子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示图片的功能。
可选地,所述预设基类还用于实现第一预设方法,其中,所述第一预设方法为:
所述主线程将绘制所述目标视图时需要访问的变量存储在预设存储器,以及在绘制所述目标视图时从所述预设存储器中获取所述变量。
可选地,所述方法还包括:
为所述目标视图添加预设属性,其中,每当针对所述目标视图添加绘制任务时,使得所述预设属性的值加1;
在每个所述异步线程的预设操作节点上,查询所述预设属性的当前值和所述预设属性的初始值;
检测到所述预设属性的当前值与所述预设属性的初始值不同时,判断所述异步线程为目标异步线程;
停止所述目标异步线程绘制所述目标视图。
可选地,所述预设基类还用于实现第二预设方法,其中,所述第二预设方法为:
在绘制所述目标视图之前,或绘制所述目标视图成功后,或绘制所述目标视图失败后,生成反馈信息。
根据本公开实施例的第二方面,提出一种视图绘制装置,适用于终端,所述装置包括:
基类创建模块,被配置为执行创建继承自视图控件基类的预设基类,其中,所述预设基类具有实现视图绘制功能的接口;
异步绘制模块,被配置为执行在检测到所述预设基类具有实现视图绘制功能的接口的情况下开启异步线程,所述异步线程基于所述预设基类创建位图的上下文,使所述目标视图的绘制操作在所述位图的上下文中异步进行,其中,所述异步线程与所述终端的主线程为不同的子线程;
图片生成模块,被配置为执行在所述目标视图的所述绘制操作完成后,将所述位图的上下文生成图片;
展示模块,被配置为执行通过所述主线程展示所述图片。
可选地,所述装置还包括:
子类创建模块,被配置为执行,创建继承自所述预设基类的第一子类,其中,所述第一子类支持在异步线程中进行绘制所述目标视图的操作,以及支持对所述目标视图点击的功能;和/或
创建继承自所述第一子类的第二子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示文字和图片的功能;和/或
创建继承自所述第一子类的第三子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示图片的功能。
可选地,所述预设基类还用于实现第一预设装置,其中,所述第一预设方法为:
所述主线程将绘制所述目标视图时需要访问的变量存储在预设存储器,以及在绘制所述目标视图时从所述预设存储器中获取所述变量。
可选地,所述装置还包括:
属性添加模块,被配置为执行,为所述目标视图添加预设属性,其中,每当针对所述目标视图添加绘制任务时,使得所述预设属性的值加1;
属性查询模块,被配置为执行,在每个所述异步线程的预设操作节点上,查询所述预设属性的当前值和所述预设属性的初始值;
绘制控制模块,被配置为执行,在检测到所述预设属性的当前值与所述预设属性的初始值不同时,判断所述异步线程为目标异步线程,停止所述目标异步线程绘制所述目标视图。
可选地,所述预设基类还用于实现第二预设装置,其中,所述第二预设方法为:
在绘制所述目标视图之前,或绘制所述目标视图成功后,或绘制所述目标视图失败后,生成反馈信息
根据本公开实施例的第三方面,提出一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如上述任一实施例所述的视图绘制方法。
根据本公开实施例的第四方面,提出一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一实施例所述的视图绘制方法。
根据本公开实施例的第五方面,提供一种计算机程序产品,所述计算机程序产品被配置为执行上述任一实施例所述的视图绘制方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
本实施例通过创建继承自视图控件基类的预设基类,并设置预设基类具有实现视图绘制功能的接口,由于预设基类可以作为CALayer的代理,CALayer作为预设基类的属性,那么在基于iOS绘制视图的逻辑,在需要绘制目标视图时,判断CALayer的代理是否有实现displayLayer方法时,可以判断预设基类是否有具有实现视图绘制功能的接口。
而本实施例在创建预设基类时,就设置预设基类具有实现视图绘制功能的接口,那么上述判断结果必然是预设基类具有实现视图绘制功能的接口,也即CALayer的代理有实现displayLayer方法,那么就无需进一步判断视图是否需要交互,进而使得终端的系统不会为视图创建上下文,也就不必在主线程中进行绘制上下文的操作,从而对于目标视图,可以开启异步线程,并在异步线程位图的上下文异步执行对目标视图的绘制操作。而在异步线程中绘制视图,主线程可以进行绘制视图以外的操作,有利于避免视图复杂时,主线程发生卡顿的问题,以便提高绘制视图和显示视图的流畅性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据本公开的实施例示出的一种视图绘制方法的示意流程图。
图2是相关技术中视图绘制流程的示意图。
图3是根据本公开的实施例示出的另一种视图绘制方法的示意流程图。
图4是根据本公开的实施例示出的一种基类和子类的关系示意图。
图5是根据本公开的实施例示出的又一种视图绘制方法的示意流程图。
图6是根据本公开的实施例示出的一种视图绘制装置的示意框图。
图7是根据本公开的实施例示出的另一种视图绘制装置的示意框图。
图8是根据本公开的实施例示出的又一种视图绘制装置的示意框图。
图9是根据本公开的实施例示出的视图绘制装置所在设备的一种硬件结构图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
图1是根据本公开的实施例示出的一种视图绘制方法的示意流程图。本实施例所示的视图绘制方法可以适用于终端,所述终端的系统包括但不限于iOS系统,所述终端包括但不限于手机、平板电脑、可穿戴设备等电子设备。
如图1所示,所述视图绘制方法可以包括以下步骤:
在步骤S1中,创建继承自视图控件基类的预设基类,其中,所述预设基类具有实现视图绘制功能的接口;
在步骤S2中,在需要绘制目标视图时,检测到所述预设基类具有实现视图绘制功能的接口,开启异步线程(异步线程中的异步是指可以与主线程异步进行),所述异步线程基于所述预设基类创建位图的上下文,使所述目标视图的绘制操作在所述位图的上下文中异步进行,其中,所述异步线程为与所述终端的主线程不同的子线程;
在步骤S3中,在所述目标视图的所述绘制操作完成后,将所述位图的上下文生成图片;
在步骤S4中,通过所述主线程展示所述图片。
图2是相关技术中视图绘制流程的示意图。
如图2所示,目前iOS系统默认的视图绘制流程包括以下步骤:
由UIView(视图控件的基类)调用setNeedsDisplay,标记视图将要绘制(对应图2中[UIView setNeedsDisplay]);
调用view的Layer类中setNeedsDisplay方法(对应图2中[view.layersetNeedsDisplay]);
调用CALayer的display方法(对应图2中[CALayer display]);
终端的系统判断CALayer的代理(例如UIView)有没有实现displayLayer方法(对应图2中CALayer.delegate responseToSelectordisplay:);
若CALayer的代理没有实现displayLayer方法,需要进一步判断视图是否需要交互(对应图2中Layer hasDelegate);
若视图需要交互,系统为视图创建支持交互的上下文(context)(对应图2中[CALayer.delegatedrawLayer:inContext:]);
当在主线程中完成对视图的绘制后(对于此处创建的上下文的绘制操作,必须在主线程中进行),系统会将视图的上下文推入系统的上下文堆栈中,最终系统将堆栈中的内容持续渲染到屏幕上(对应图2中[UIView drawRect:]);
若视图需不要交互,系统为视图创建不支持交互的上下文(对应图2中[CALayerdrawInContext:]);
若CALayer的代理有实现displayLayer方法,那么终端的系统不会为视图创建上下文,绘制视图的操作可以在异步线程中进行,而不必在主线程中进行(对应图2中[CALayer.delegatedisplayLayer])。
由于相关技术中默认的iOS系统中默认是CALayer的代理没有实现displayLayer方法,因此相关技术中绘制视图的方式,默认需要进一步判断视图是否需要交互,而若视图需要交互,系统需要为视图创建支持交互的上下文,由于对上下文的绘制操作必须在主线程中进行,就导致了对主线程的占用。
而相关技术中有通过异步线程来异步绘制视图的方法,但是其整体绘制视图的操作流程和逻辑与iOS系统整体绘制视图操作的流程和逻辑差异很大,为了将其应用到iOS系统中,需要编程人员重新编写大量代码来实现,学习成本较高,兼容性也较差。
本实施例通过创建继承自视图控件基类(例如UIView)的预设基类,并设置预设基类具有实现视图绘制功能的接口(其中,绘制视图的功能可以是displayLayer方法),由于预设基类可以作为CALayer的代理,CALayer作为预设基类的属性,那么在基于iOS绘制视图的逻辑,在需要绘制目标视图时,判断CALayer的代理是否有实现displayLayer方法时,可以判断预设基类是否有具有实现视图绘制功能的接口。
而本实施例在创建预设基类时,就设置预设基类具有实现视图绘制功能的接口,那么上述判断结果必然是预设基类具有实现视图绘制功能的接口,也即CALayer的代理有实现displayLayer方法,那么就无需进一步判断视图是否需要交互,进而使得终端的系统不会为视图创建上下文,也就不必在主线程中进行绘制上下文的操作,从而对于目标视图,可以开启异步线程,异步线程可以基于预设基类创建位图的上下文,从而异步执行对目标视图的绘制操作。而在异步线程中绘制视图,主线程可以进行绘制视图以外的操作,有利于避免视图复杂时,主线程发生卡顿的问题,以便提高绘制视图和显示视图的流畅性。
而且,本实施例中创建的预设基类继承自视图控件基类,例如UIView,所以本实施例中创建的预设基类具备与视图控件基类相同的功能,例如支持视图的绘制、交互等,从而无需编程人员重新编码来构建绘制视图的逻辑,而是可以继承终端现有系统(例如iOS系统)中相同的逻辑类实现相同的功能,一方面减少了编码人员的工作量,另一方面无需使用者重新适应新的绘制视图的逻辑,减少了学习适应的时间。
需要说明的是,在相关技术中,当在主线程中完成对视图的绘制后,系统会将视图的上下文推入系统的上下文堆栈中,最终系统将堆栈中的内容持续渲染到屏幕上,此过程是针对终端的一帧图像而言的,也即系统会以帧为单位显示绘制后的图像。
而在本实施例中,则是在异步线程基于预设基类创建位图的上下文,然后针对视图的绘制操作会在该位图的上下文进行,在完成对视图的绘制后,可以将位图的上下文生成一张图片,也即本实施例中显示的单位是一张图片(或者一个单元格cell),可以是小于相关技术中帧的单位。
本实施例所述的方法可以支持多种绘制视图的方式,例如:
其一,可以支多个异步线程一直异步绘制视图,这主要适用于静态的页面,页面中的内容不需要经常改变;其二,可以支持多个异步线程一直同步绘制视图,这主要适用于页面可以点击交互的情况,例如点击按钮可以跳转页面,此时要保证按钮是与视图中其他元素同步绘制出来的,否则容易出现页面闪烁的情况;其三,可以支持多个异步线程仅仅在内容改变的时候异步绘制视图,这主要适用于滑动的流式页面,并仅在页面的内容改变时通过多个异步线程异步绘制视图。
图3是根据本公开的实施例示出的另一种视图绘制方法的示意流程图。如图3所示,所述方法还包括:
在步骤S5中,创建继承自所述预设基类的第一子类,其中,所述第一子类支持在异步线程中进行绘制所述目标视图的操作,以及支持对所述目标视图点击的功能;和/或
在步骤S6中,创建继承自所述第一子类的第二子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示文字和图片的功能;和/或
在步骤S7中,创建继承自所述第一子类的第三子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示图片的功能。
其中,步骤S5至S7可以如图3所示,在步骤S2之前执行,也可以根据需要调整执行顺序,例如在需要创建基类的子类时才执行。另外,步骤S5至S7可以根据需要选择执行其中的任意一步或两步,而不必执行其中全部步骤。
图4是根据本公开的实施例示出的一种基类和子类的关系示意图。
如图4所示,UIView作为视图类的子类,可以支持有关视图的功能,例如视图的绘制,针对视图的交互等,而本实施例中创建的基类KSAsyncDrawingView,则继承自UIView,因此也具备与UIView相同的功能。并且,基类KSAsyncDrawingView还可以于实现displayLayer方法,使得UIView作为CALayer的代理能够实现displayLayer方法,进而使得终端的系统不会为视图创建上下文,从而使得后续绘制视图的操作可以切换到异步线程中进行。
第一子类KSUIControl则继承自基类KSAsyncDrawingView,因此也支持在异步线程上绘制视图的功能,并且可以支持对目标视图点击的功能,可以类比于相关技术系统中的UIControl类。
第二子类KSButton则继承自第一子类KSUIControl,因此也支持在异步线程上绘制视图的功能,并且支持在目标视图中展示文字和图片的功能,可以类比于相关技术系统中的UIButton类。
第三子类KSImageView也继承自第一子类KSUIControl,因此也支持在异步线程上绘制视图的功能,并且支持在目标视图中展示图片的功能,可以类比于相关技术系统中的UIImageView类。
另外,本实施还可以创建其他子类,例如图4所示的KSTDrawing类,其支持在异步线程上绘制视图的功能,并且还支持计算字符串大小的分类(类比于相关技术系统中的NSSting类),以及支持进行图片剪裁的分类(类比于相关技术系统中的UIImage类)。
根据本实施例,在创建基类的基础上,还可以创建第一子类、第二子类、第三子类,以在支持在异步线程上绘制视图的功能的基础上,支持对目标视图点击,在目标视图中展示文字和图片,支持在目标视图中展示图片等功能,使得本实施例所支持的功能,与相关技术中系统所支持的功能相同或相近,以便使用者在习惯调用相关系统中接口时,也能够习惯调用本实施例终端中系统的接口,确保系统的接口具有较高的兼容性。
可选地,所述预设基类还用于实现第一预设方法,其中,所述第一预设方法为:
所述主线程将绘制所述目标视图时需要访问的变量存储在预设存储器,以及在绘制所述目标视图时从所述预设存储器中获取所述变量。
在相关技术中,由主线程来绘制视图,原因之一是为了确保安全性,因为主线程是线性的,绘制操作完全由主线程执行,在绘制过程中访问变量和获取变量的操作,不会因为线程不同而出现差异。
本实施例可以在创建基类时,设置基类用于实现第一预设方法,例如名称为:
(NSDictionary*)currentDrawingUserInfo;
具体是使得主线程将绘制目标视图时需要访问的变量(例如全局变量ivar)存储在预设存储器(例如上述NSDictionary中),并在绘制目标视图时从预设存储器中获取变量。
据此,虽然绘制视图的操作由异步线程执行,但是存储变量和获取变量的操作是由主线程完成的,那么异步线程将不能更改存储在预设存储器中的变量,从而使得后续获取到的变量就是之前存储到预设存储器中的变量,而不会被篡改。
图5是根据本公开的实施例示出的又一种视图绘制方法的示意流程图。如图5所示,所述方法还包括:
在步骤S8中,为所述目标视图添加预设属性,其中,每当针对所述目标视图添加绘制任务时,使得所述预设属性的值加1;
在步骤S9中,在每个所述异步线程的预设操作节点上,查询所述预设属性的当前值和所述预设属性的初始值;
在步骤S10中,检测到所述预设属性的当前值与所述预设属性的初始值不同时判断所述异步线程为目标异步线程;
在步骤S11中,停止所述目标异步线程绘制所述目标视图。
其中,步骤S8可以如图5所示,在步骤S2之前执行,也可以根据需要调整执行顺序,例如在需要添加预设属性时才执行。
在一个实施例中,绘制视图的异步线程可以是可一个或多个,例如以终端是手机为例,用户滚动手机中的页面观看评论,那么某一条评论第一次需要展现在屏幕中时,可以由异步线程A来绘制该评论,而当用户滚动页面,使得该评论滚动出屏幕后,又滚动回屏幕,那么异步线程A可能还未绘制完该评论,而又需要另一个异步线程,例如异步线程B来绘制该评论,这就导致针对一个视图可能存在多个异步线程进行绘制,但是实际上只需要一个线程绘制视图即可,多个线程绘制同一个视图会造成线程资源的浪费。
本实施例可以为目标视图添加预设属性,例如为每个视图(view)的layer上添加了一个NSInteger类型的属性,其中,每当目标视图的添加绘制任务时,预设属性的值加1,也即每当针对目标视图有新的异步线程发起绘制操作时,预设属性的值加1。
然后在每个异步线程的预设操作节点(例如耗时大于预设时长的操作对应的节点)上,检测所预设属性的当前值和所述预设属性的初始值是否相同,若检测到目标异步线程查询到预设属性的当前值与预设属性的初始值不同,可以所述异步线程为目标异步线程,然后停止目标异步线程绘制所述目标视图。
那么对于先对目标视图发起绘制操作的异步线程A,预设属性的当前值和预设属性的初始值均为1,而当又有新的异步线程发起对目标视图的绘制操作,对于异步线程A而言,预设属性的值加1,也即预设属性的当前值为2,与预设属性的初始值1不同,对于新的异步线程B,预设属性的当前值和预设属性的初始值均为2,所以可以判断异步线程A为目标异步线程,停止异步线程A绘制目标视图。
据此,可以仅通过一个异步线程绘制目标视图,以便节省异步线程的资源来执行其他操作,而且有利于避免多个异步线程绘制同一个视图导致的显示视图错乱的问题。
可选地,所述预设基类还用于实现第二预设方法,其中,所述第二预设方法为:
在绘制所述目标视图之前,或绘制所述目标视图成功后,或绘制所述目标视图失败后,生成反馈信息。
本实施例可以在创建基类时,设置基类用于实现第二预设方法,第二预设方法具体是在绘制所述目标视图之前,或绘制所述目标视图成功后,或绘制所述目标视图失败后,生成反馈信息。
在一个实施例中,通过设置基类在绘制目标视图之前,或绘制目标视图成功后,或绘制目标视图失败后,生成反馈信息,可以保证用户及时地了解到绘制视图的结果,而且反馈信息不仅仅可以反馈给用户,还可以反馈(也可以称作回调)给基类的子类(例如上述第一子类、第二子类、第三子类),以便子类能够基于该反馈对视图进行相应的处理,使得处理后的视图能够具有良好的显示效果,以便满足用户的观看需要。
其中,对于在绘制目标视图之前生成反馈信息,反馈信息是从主线程上获取的,例如反馈信息包括但不限于全局变量ivar,获取到的反馈信息可以用于表征绘制目标视图之前场景的状态值,以供绘制过程中使用。
与前述视图绘制方法的实施例相对应地,本公开还提出了视图绘制装置的实施例。
图6是根据本公开的实施例示出的一种视图绘制装置的示意框图。本实施例所示的视图绘制装置可以适用于终端,所述终端包括但不限于手机、平板电脑、可穿戴设备等电子设备。
如图6所示,所述视图绘制装置可以包括:
基类创建模块1,被配置为执行创建继承自视图控件基类的预设基类,其中,所述预设基类具有实现视图绘制功能的接口;
异步绘制模块2,被配置为执行在检测到所述预设基类具有实现视图绘制功能的接口的情况下开启异步线程,所述异步线程基于所述预设基类创建位图的上下文,使所述目标视图的绘制操作在所述位图的上下文中异步进行,其中,所述异步线程与所述终端的主线程为不同的子线程;
图片生成模块3,被配置为执行在所述目标视图的所述绘制操作完成后,将所述位图的上下文生成图片;
展示模块4,被配置为执行通过所述主线程展示所述图片
图7是根据本公开的实施例示出的另一种视图绘制装置的示意框图。如图7所示,所述装置还包括:
子类创建模块5,被配置为执行,创建继承自所述预设基类的第一子类,其中,所述第一子类支持在异步线程中进行绘制所述目标视图的操作,以及支持对所述目标视图点击的功能;和/或
创建继承自所述第一子类的第二子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示文字和图片的功能;和/或
创建继承自所述第一子类的第三子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示图片的功能。
可选地,所述预设基类还用于实现第一预设装置,其中,所述第一预设方法为:
所述主线程将绘制所述目标视图时需要访问的变量存储在预设存储器,以及在绘制所述目标视图时从所述预设存储器中获取所述变量。
图8是根据本公开的实施例示出的又一种视图绘制装置的示意框图。如图8所示,所述装置还包括:
属性添加模块6,被配置为执行,为所述目标视图添加预设属性,其中,每当针对所述目标视图添加绘制任务时,使得所述预设属性的值加1;
属性查询模块7,被配置为执行,在每个所述异步线程的预设操作节点上,查询所述预设属性的当前值和所述预设属性的初始值;
绘制控制模块8,被配置为执行,在检测到所述预设属性的当前值与所述预设属性的初始值不同时,判断所述异步线程为目标异步线程,停止所述目标异步线程绘制所述目标视图。
可选地,所述预设基类还用于实现第二预设装置,其中,所述第二预设方法为:
在绘制所述目标视图之前,或绘制所述目标视图成功后,或绘制所述目标视图失败后,生成反馈信息。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
本公开的实施例还提出一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现上述任一实施例所述的视图绘制方法。
本公开的实施例还提出一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述任一实施例所述的视图绘制方法。
本公开的实施例还提出一种计算机程序产品,所述计算机程序产品被配置为执行上述任一实施例所述的视图绘制方法。
可选地,存储介质可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
本公开的实施例还提出一种计算机程序产品,所述计算机程序产品被配置为执行上述任一实施例所述的视图绘制方法。
本公开实施例示出的视图绘制装置的实施例可以应用在终端等设备上。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图9所示,为根据本公开的实施例示出的视图绘制装置所在设备的一种硬件结构图,除了图9所示的处理器、网络接口、内存以及非易失性存储器之外,实施例中装置所在的设备通常还可以包括其他硬件,如负责处理报文的转发芯片等等;从硬件结构上来讲该设备还可能是分布式的设备,可能包括多个接口卡,以便在硬件层面进行报文处理的扩展。
本领域技术人员在考虑说明书及实践这里公开的公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本公开实施例所提供的方法和装置进行了详细介绍,本文中应用了具体个例对本公开的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本公开的方法及其核心思想;同时,对于本领域的一般技术人员,依据本公开的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本公开的限制。
Claims (10)
1.一种视图绘制方法,其特征在于,适用于终端,所述方法包括:
创建继承自视图控件基类的预设基类,其中,所述预设基类具有实现视图绘制功能的接口;
在需要绘制目标视图时,检测到所述预设基类具有实现视图绘制功能的接口,开启异步线程,所述异步线程基于所述预设基类创建位图的上下文,使所述目标视图的绘制操作在所述位图的上下文中异步进行,其中,所述异步线程为与所述终端的主线程不同的子线程;
在所述目标视图的所述绘制操作完成后,将所述位图的上下文生成图片;
通过所述主线程展示所述图片。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
创建继承自所述预设基类的第一子类,其中,所述第一子类支持在异步线程中进行绘制所述目标视图的操作,以及支持对所述目标视图点击的功能;和/或
创建继承自所述第一子类的第二子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示文字和图片的功能;和/或
创建继承自所述第一子类的第三子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示图片的功能。
3.根据权利要求1所述的方法,其特征在于,所述预设基类还用于实现第一预设方法,其中,所述第一预设方法为:
所述主线程将绘制所述目标视图时需要访问的变量存储在预设存储器,以及在绘制所述目标视图时从所述预设存储器中获取所述变量。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
为所述目标视图添加预设属性,其中,每当针对所述目标视图添加绘制任务时,使得所述预设属性的值加1;
在每个所述异步线程的预设操作节点上,查询所述预设属性的当前值和所述预设属性的初始值;
检测到所述预设属性的当前值与所述预设属性的初始值不同时,判断所述异步线程为目标异步线程;
停止所述目标异步线程绘制所述目标视图。
5.根据权利要求1所述的方法,其特征在于,所述预设基类还用于实现第二预设方法,其中,所述第二预设方法为:
在绘制所述目标视图之前,或绘制所述目标视图成功后,或绘制所述目标视图失败后,生成反馈信息。
6.一种视图绘制装置,其特征在于,适用于终端,所述装置包括:
基类创建模块,被配置为执行创建继承自视图控件基类的预设基类,其中,所述预设基类具有实现视图绘制功能的接口;
异步绘制模块,被配置为执行在检测到所述预设基类具有实现视图绘制功能的接口的情况下开启异步线程,所述异步线程基于所述预设基类创建位图的上下文,使所述目标视图的绘制操作在所述位图的上下文中异步进行,其中,所述异步线程与所述终端的主线程为不同的子线程;
图片生成模块,被配置为执行在所述目标视图的所述绘制操作完成后,将所述位图的上下文生成图片;
展示模块,被配置为执行通过所述主线程展示所述图片。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
子类创建模块,被配置为执行,创建继承自所述预设基类的第一子类,其中,所述第一子类支持在异步线程中进行绘制所述目标视图的操作,以及支持对所述目标视图点击的功能;和/或
创建继承自所述第一子类的第二子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示文字和图片的功能;和/或
创建继承自所述第一子类的第三子类,其中,所述第二子类支持在异步线程中进行绘制所述目标视图的操作,以及支持在所述目标视图中展示图片的功能。
8.根据权利要求6所述的装置,其特征在于,所述预设基类还用于实现第一预设装置,其中,所述第一预设方法为:
所述主线程将绘制所述目标视图时需要访问的变量存储在预设存储器,以及在绘制所述目标视图时从所述预设存储器中获取所述变量。
9.一种电子设备,其特征在于,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至5中任一项所述的视图绘制方法。
10.一种存储介质,其特征在于,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如权利要求1至5中任一项所述的视图绘制方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911133975.0A CN110930496B (zh) | 2019-11-19 | 2019-11-19 | 视图绘制方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911133975.0A CN110930496B (zh) | 2019-11-19 | 2019-11-19 | 视图绘制方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110930496A true CN110930496A (zh) | 2020-03-27 |
CN110930496B CN110930496B (zh) | 2021-01-26 |
Family
ID=69853568
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911133975.0A Active CN110930496B (zh) | 2019-11-19 | 2019-11-19 | 视图绘制方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110930496B (zh) |
Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110157311A1 (en) * | 2009-12-31 | 2011-06-30 | Industrial Technology Research Institute | Method and System for Rendering Multi-View Image |
CN102123246A (zh) * | 2010-01-07 | 2011-07-13 | 新奥特(北京)视频技术有限公司 | 一种滚屏设计中滚屏节点的生成方法和装置 |
CN103902318A (zh) * | 2012-12-30 | 2014-07-02 | 青岛海尔软件有限公司 | 基于Android平台的图片加载方法 |
CN104035668A (zh) * | 2014-06-24 | 2014-09-10 | 广州金山网络科技有限公司 | 一种异步加载数据滑动性能的优化方法及系统、移动终端 |
US20140280517A1 (en) * | 2013-03-15 | 2014-09-18 | Foresee Results, Inc. | System and Method for Capturing Interaction Data Relating to a Host Application |
CN105549820A (zh) * | 2015-12-11 | 2016-05-04 | 魅族科技(中国)有限公司 | 一种显示图形用户界面的方法及终端 |
CN105812955A (zh) * | 2016-03-15 | 2016-07-27 | 深圳市茁壮网络股份有限公司 | 一种滚动字幕显示方法及机顶盒处理器 |
CN105872679A (zh) * | 2015-12-31 | 2016-08-17 | 乐视网信息技术(北京)股份有限公司 | 弹幕显示方法和装置 |
US20170115840A1 (en) * | 2013-03-04 | 2017-04-27 | Facebook, Inc. | Techniques for asynchronous rendering |
US20170154014A1 (en) * | 2014-05-21 | 2017-06-01 | Facebook, Inc. | Asynchronous execution of animation tasks for a gui |
CN107203960A (zh) * | 2016-06-30 | 2017-09-26 | 北京新媒传信科技有限公司 | 图像渲染方法及装置 |
CN107729094A (zh) * | 2017-08-29 | 2018-02-23 | 口碑(上海)信息技术有限公司 | 一种用户界面渲染的方法及装置 |
CN108600852A (zh) * | 2018-04-28 | 2018-09-28 | 北京酷我科技有限公司 | 一种弹幕效果的实现方法 |
CN109542903A (zh) * | 2018-11-14 | 2019-03-29 | 珠海格力智能装备有限公司 | 数据处理方法及装置 |
CN109788334A (zh) * | 2019-01-31 | 2019-05-21 | 北京字节跳动网络技术有限公司 | 弹幕处理方法、装置、电子设备及计算机可读存储介质 |
CN110347493A (zh) * | 2019-07-16 | 2019-10-18 | 广州虎牙科技有限公司 | 页面数据的处理方法、显示方法、装置、设备及存储介质 |
-
2019
- 2019-11-19 CN CN201911133975.0A patent/CN110930496B/zh active Active
Patent Citations (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110157311A1 (en) * | 2009-12-31 | 2011-06-30 | Industrial Technology Research Institute | Method and System for Rendering Multi-View Image |
CN102123246A (zh) * | 2010-01-07 | 2011-07-13 | 新奥特(北京)视频技术有限公司 | 一种滚屏设计中滚屏节点的生成方法和装置 |
CN103902318A (zh) * | 2012-12-30 | 2014-07-02 | 青岛海尔软件有限公司 | 基于Android平台的图片加载方法 |
US20170115840A1 (en) * | 2013-03-04 | 2017-04-27 | Facebook, Inc. | Techniques for asynchronous rendering |
US20140280517A1 (en) * | 2013-03-15 | 2014-09-18 | Foresee Results, Inc. | System and Method for Capturing Interaction Data Relating to a Host Application |
US20170154014A1 (en) * | 2014-05-21 | 2017-06-01 | Facebook, Inc. | Asynchronous execution of animation tasks for a gui |
CN104035668A (zh) * | 2014-06-24 | 2014-09-10 | 广州金山网络科技有限公司 | 一种异步加载数据滑动性能的优化方法及系统、移动终端 |
CN105549820A (zh) * | 2015-12-11 | 2016-05-04 | 魅族科技(中国)有限公司 | 一种显示图形用户界面的方法及终端 |
CN105872679A (zh) * | 2015-12-31 | 2016-08-17 | 乐视网信息技术(北京)股份有限公司 | 弹幕显示方法和装置 |
CN105812955A (zh) * | 2016-03-15 | 2016-07-27 | 深圳市茁壮网络股份有限公司 | 一种滚动字幕显示方法及机顶盒处理器 |
CN107203960A (zh) * | 2016-06-30 | 2017-09-26 | 北京新媒传信科技有限公司 | 图像渲染方法及装置 |
CN107729094A (zh) * | 2017-08-29 | 2018-02-23 | 口碑(上海)信息技术有限公司 | 一种用户界面渲染的方法及装置 |
CN108600852A (zh) * | 2018-04-28 | 2018-09-28 | 北京酷我科技有限公司 | 一种弹幕效果的实现方法 |
CN109542903A (zh) * | 2018-11-14 | 2019-03-29 | 珠海格力智能装备有限公司 | 数据处理方法及装置 |
CN109788334A (zh) * | 2019-01-31 | 2019-05-21 | 北京字节跳动网络技术有限公司 | 弹幕处理方法、装置、电子设备及计算机可读存储介质 |
CN110347493A (zh) * | 2019-07-16 | 2019-10-18 | 广州虎牙科技有限公司 | 页面数据的处理方法、显示方法、装置、设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
CODE_人生: ""Graver"", 《HTTPS://WWW.JIANSHU.COM/P/74705B60CA0B》 * |
彭序猿: """Graver•学习笔记•入门使用""", 《HTTPS://WWW.JIANSHU.COM/P/72092C919CEE》 * |
飞不越疯人院: ""iOS UIView绘制&异步绘制"", 《HTTPS://WWW.JIANSHU.COM/P/DBADA5F44AC1》 * |
Also Published As
Publication number | Publication date |
---|---|
CN110930496B (zh) | 2021-01-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210133909A1 (en) | Screen capture method, terminal, and storage medium | |
TWI683251B (zh) | 界面展示方法及裝置 | |
CN110505141B (zh) | 即时通讯消息的处理方法、装置、可读介质及电子设备 | |
TWI671647B (zh) | 計算頁面首屏描繪時長的方法、裝置及電子設備 | |
CN106168874B (zh) | 一种基于网页的彩信编辑方法和装置 | |
CN109361948B (zh) | 界面管理方法、智能终端及可读存储介质 | |
CN109005283A (zh) | 显示通知消息的方法、装置、终端及存储介质 | |
CN105824517B (zh) | 一种桌面的实现方法和装置 | |
CN110019464B (zh) | 页面处理方法及装置 | |
CN111368235A (zh) | 页面渲染和展示方法、装置、服务器、存储介质 | |
CN107045546B (zh) | 一种网页处理方法、装置及智能终端 | |
CN114816401B (zh) | 界面元素的定位方法、电子设备及存储介质 | |
CN106990962B (zh) | 动态锁屏壁纸切换方法、装置及终端 | |
US11941728B2 (en) | Previewing method and apparatus for effect application, and device, and storage medium | |
US10061494B2 (en) | Method and device for webpage zooming on electronic apparatus | |
CN105808307B (zh) | 一种页面显示方法和装置 | |
CN110968314A (zh) | 一种页面生成方法及装置 | |
CN114356479B (zh) | 一种页面渲染方法及装置 | |
CN112148395A (zh) | 页面显示方法、装置、设备及存储介质 | |
CN111147659A (zh) | 一种显示控制方法、装置、电子设备及存储介质 | |
WO2018210113A1 (zh) | 动态信息展示的方法、计算机设备和存储介质 | |
CN110930496B (zh) | 视图绘制方法、装置、电子设备和存储介质 | |
CN108052546A (zh) | 一种在移动终端浏览图片的方法及移动终端 | |
WO2021129416A1 (zh) | 移动终端帧率的控制方法、装置、计算机设备和存储介质 | |
CN114489910B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |