具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
在使用input标签实现文本框中输入文字、插入文字和删除文字的操作时,使用input标签,并将input标签添加到DOM层中,使Input标签在DOM层中的位置与Canvas层中的显示位置对应。DOM层显示在Canvas层的上方,因此,从视觉上形成input标签显示在Canvas层中。但是,当打开另一个页面时,再次打开的页面中的对象重新绘制在Canvas层中,此时,DOM层依然在Canvas层的上方,导致input标签未被覆盖,所以,需要在DOM层上重新创建一个Canvas层,在该Canvas层上绘制再次打开页面的对象,从而覆盖DOM层。
然而,重新建立的Canvas层使UI的架构复杂,后期不利于UI的维护。因此,本申请公开的方法中,在基于Canvas标签开发智能电视UI时,开发者自行开发UI的结构以及所有UI对象的格式、动画等,并将其预设在智能电视的存储器中。在智能电视开机显示UI时,由Canvas标签提供的绘图API根据UI的结构以及所有UI对象的格式、动画等在Canvas标签上绘制UI对象。其中,在智能电视中预设文本框的绘制格式、尺寸等,绘制UI的过程中,在Canvas标签上绘制文本框。
下文中给出在Canvas标签上绘制的文本框中实现文字的输入、插入和删除等操作。参见图2,为本申请实施例提供的一种智能电视UI文本框的文字实现方法。
在步骤S101中,获取在第一Canvas标签上文本框中光标的位置坐标以及文本框中当前文字的长度。
当智能电视开机显示UI页面后,用户可通过遥控器控制焦点选择影视剧或功能,当遥控器将焦点移动到文本框位置时,焦点以光标形式显示,用于指示用户输入文字、插入文字或删除文字的位置。
当遥控器控制焦点移动到文本框时,在文本框中绘制光标,一般情况下,如果文本框中已经有文字,则显示在文字最后。此时,获取在第一Canvas标签上文本框中光标的位置坐标及文本框中当前文字的长度,对光标的位置坐标和文本框中文字的长度进行实施定位和计算。
具体的,参见图3,为本申请实施例提供的步骤S101的详细流程示意图。
在步骤S1011中,获取第一Canvas标签上文本框中第一个文字到光标位置的第一像素长度,以及第一个文字到最后一个文字的第二像素长度。
光标的位置坐标由文字的位置坐标计算得到,本申请实施例中,预设文本框中第一个文字的坐标为(x0,y0),或者文本框的文字的起始位置为(x0,y0)。根据光标在文本框中的位置计算光标的位置坐标,例如,当监测到焦点在文本框中第n个文字上,调用Canvas上下文内置的measureText接口,传入文字第一个字符到光标位置的字符串,从而返回文字的像素长度w。
也就是说,通过measureText接口可得到文本框中第一个文字到光标位置的第一像素长度。
在步骤S1012中,根据第一像素长度确定光标的位置坐标。
在Canvas层上,文本框的每个文字的坐标中,纵坐标不变,横坐标发生改变,因此,计算出第一个文字到光标位置的横坐标差值即为第一像素长度。第一像素长度可由measureText接口得到,因此,将第一个文字的横坐标加上第一像素长度即可得到光标的横坐标。
当通过measureText接口得到第一个文字到光标位置的第一像素长度为w时,光标的位置坐标为(x0+w,y0)。
在步骤S1013中,根据第二像素长度确定文本框中文字的长度。
在文本框中输入文字时,定义文本框中文字的长度为m,通过第一个文字到第二个文字横坐标的差值计算得到第二像素长度,那么第二像素长度即为文本框中文字的长度。在后续文字处理中,只要插入或输入文字,m值均加上预设字符长度,因此,可直接调用m值便可获取。
在获取光标的位置坐标和文本框中文字的长度时的代码由开发人员自行开发,与直接使用input标签不同,使用input标签是可调用接口直接获取input中光标的位置和文字长度。本申请实施例中,在获取到光标的位置坐标和文本框中当前文字的长度后,在后续的文字处理过程中,可实时监测文本框中文字的变化。
在步骤S102中,当接收到文字输入指令或文字插入指令后,如果文本框中当前文字的长度小于所述文本框的长度,则在所述光标的位置坐标处绘制输入文字或插入文字,以及每输入或插入一个文字,所述光标的位置坐标和所述文本框中文字的长度加预设字符长度。其中,当文本框中输入英文字母时,预设字符长度为英文字母的字符长度;当文本框中输入中文字符时,预设字符长度为中文字符长度,即两个字符长度。
当光标在文本框最后一个文字的位置时,如果监测到用户文字输入操作,此时将用户的文字输入操作转化为文字输入指令;当光标在文本框中第一个文字和最后一个文字之间时,如果监测到用户文字输入操作,则将用户的文字输入操作转化为文字插入指令。
由于基于Canvas层的绘制UI的过程中,文本框和文字均是绘制在Canvas层上,文本框的长度有限,所以,在文本框中绘制的文字长度有限。在接收到文字输入指令或文字插入指令后,判断文本框中当前文字的长度是否小于文本框的长度,如果文本框中当前文字的长度小于文本框的长度,则将输入文字或插入文字直接绘制在文本框中光标的位置坐标处,每输入或插入一个文字,则光标的位置坐标和文本框中文字的长度加预设字符长度。
在接收到下一个文字的文字输入指令或文字插入指令后,继续判断文本框中当前文字的长度是否小于文本框的长度,如果文本框中当前文字的长度小于文本框的长度,则继续将文字绘制在文本框中光标的位置坐标处。
在输入文字或插入文字时,调用context.fillText接口,传入光标的位置坐标,将文字绘制在Canvas上光标的位置坐标处。
在步骤S103中,当接收到文字删除指令后,在所述光标的位置坐标处删除文字,以及每删除一个文字,所述光标的位置坐标和所述文本框中文字的长度减预设字符长度。
在步骤S103的基础上,文本框中绘制的是长度不超过文本框长度的文字,如果在文本框中绘制文字的情况下,接收到文字删除指令,则直接在光标的位置坐标处删除文字即可。
用户按压遥控器上的删除按键时,如果监测到用户的删除操作,则将删除操作转化为删除指令,使用Array类型对象的slice接口,传当前光标的位置坐标,对文本框中的文字进行字符删除处理,从而实现文本框中的文字删除操作。每删除一个文字,则将光标的位置坐标和文本框中文字的长度减去预设字符长度。
在步骤S104中,当文字输入、插入或删除完成后,在所述光标的位置坐标处绘制所述光标。
当每次输入文字、插入文字或删除文字后,光标的位置坐标也随着改变,那么就需要重新绘制光标,由于本申请实施例中需要调用Canvas标签中的绘制接口绘制光标,并且使光标闪烁,因此,参见图4,为本申请实施例中步骤S104详细流程示意图。
在步骤S1041中,在所述光标的坐标位置处绘制初始透明度值alpha等于1的光标。
预设光标的初始透明度值alpha等于1,使光标初始绘制在Canvas上时是不透明状态,光标的形状可绘制成竖直直线,也可以根据用户需要绘制成任意形状,另外,光标的颜色也可以为任意的颜色,在此不做具体限定。
在光标的位置坐标处绘制透明度值alpha等于1的光标,如果要实现光标的闪烁,则需要不断改变光标的透明度。
在步骤S1042中,如果所述光标的透明度值alpha等于1,则将所述透明度值alpha减去预设值,直到所述透明度值alpha等于0。
当根据初始透明度值alpha绘制好光标后,判断光标的透明度值alpha,如果光标的透明度值等于1,则,将透明度值alpha减去预设值,知道光标的透明度值alpha等于0,其中,预设值优选设置为0.1。当然,该预设值的大小在此不做具体限定。
从alpha等于1开始不断减去0.1,重复执行10次之后,alpha值等于0,此时,在步骤S1043中,如果所述透明度值alpha等于0,则将所述透明度值alpha加上预设值,直到所述透明度值alpha等于1。
如果光标的透明度值alpha等于0,此时,将透明度值alpha加上预设值,也就是将透明度值alpha加上0.1,重复执行10次,直到透明度值alpha等于1。
不断重复步骤S1042和步骤S1043,使光标由不透明变为透明,再由透明变为不透明,从而实现光标的闪烁。
由上述实施例可知,基于Canvas绘制的文本框中,获取第一Canvas标签上文本框中光标的位置坐标以及文本框中当前文字的长度,并实时监测文本框中当前文字的长度与文本框的长度,如果当前文字的长度小于文本框的长度,则在接收到文字输入指令或文字插入指令后,在光标的位置坐标处直接绘制文字,同样的,在接收到文字删除指令后,在光标的位置坐标处删除文字。另外,在绘制光标过程中,通过不断调整光标的透明度,实现光标的闪烁。因此,本申请实施例中提供的文本框中文字实现方法,不需要使用input标签,也不需要创建DOM层,从而简化UI架构,有利于开发和维护。
参见图5,为本申请实施例提供的另一种智能电视UI文本框的文字实现方法。
在步骤S105中,如果所述文本框中当前文字的长度大于或等于所述文本框的长度,则创建第二Canvas标签。
本申请实施例应用于文本框中当前文字的长度大于或等于文本框的长度的情况。如果文本框中当前文字的长度大于或等于文本框的长度,如果此时继续在光标的位置坐标处绘制文字,则文字会超出文本框外,此时需要对文字进行截取,只显示文字后面的部分。
在基于Canvas绘制文字的过程中,如果直接计算并截取文字的话,文字容易发生变化,在开发过程中还需要维护全文本的字符串。另外,如果正好有半个字符需要隐藏,那么无法截取半个字符,因此,本申请中创建第二Canvas标签,第二Canvas标签起到缓存的作用,并且属于离屏画布,在后台执行绘制动作,而不显示在显示屏上。
document.createElement用于生成UI对象,第二Canvas标签在没有调用addChildNode接口加入到Dom结构之前是不会显示的。
在步骤S106中,将所述文本框中的当前文字和输入文字或插入文字按照文字顺序绘制在所述第二Canvas标签上。
将文本框中当前文字和输入文字,或者将文本框中当前文字和插入文字按照文字的顺序依次绘制在第二Canvas标签上,其中,如果接收到文字输入指令时,文本框中当前文字的长度等于或大于文本框的长度,此时,将文本框中当前文字和输入文字按照文字的顺序绘制在第二Canvas标签上;如果接收到文字插入指令时,文本框中当前文字的长度等于或大于文本框的长度,此时,将插入文字插入光标的位置坐标处后绘制在第二Canvas标签上。
第二Canvas标签的作用是在文本框中的文字超出文本框的长度时,缓存文本框中的文字,将截取超长文字的操作在第二Canvas标签上执行。
在步骤S107中,将绘制在所述第二Canvas标签上的绘制文字转化成图片。
由于Canvas对文字的绘制能力较弱,对图片的绘制能力较强,所以,将绘制在第二Canvas标签上的绘制文字转化成图片,并且,在截取文字的时候,不影响半个字符的截取。
另外,再次执行输入文字、插入文字和删除文字的操作时,也可以在第二Canvas标签中图片的基础上进行输入、插入和删除。
在步骤S108中,由所述图片的最后一个文字开始,向前截取与所述文本框长度相同的文字由所述第二Canvas标签上绘制文字的截取位置开始,截取与所述截取长度相同长度的文字。
将第二Canvas标签中的绘制文字转换成图片格式后,使用图片进行截取,能够实现半个字符的截取。图片的最后一个文字开始,向前截取与文本框长度相同的文字,即可将截取的文字绘制在第一Canvas标签的文本框中。
在步骤S109中,将截取的文字绘制在第一Canvas标签的文本框中,以及光标的位置坐标和文本框中文字的长度不变。
将截取的文字绘制在第一Canvas标签的文本框中,由于截取文字的长度与文本框的长度相同,因此,截取的文字可绘制于整个文本框中。此时,由于在位置坐标处输入或插入文字后使文本框中的文字超长,而超长部分被截取,所以光标的位置坐标不变,文本框中文字的长度依然等于文本框的长度,所以文本框中文字长度也不变。
将截取的文字绘制在第一Canvas标签的文本框中的过程,是一个复制的过程,也就是将在第二Canvas标签上截取的文字复制在第一Canvas标签的文本框中,并非剪切。
由上述实施例可知,如果文本框中文字的长度等于或大于文本框的长度时,通过创建第二Canvas标签,在第二Canvas标签上截取文字,将截取的文字绘制在第一Canvas标签的文本框中,从而实现对于超出文本框长度的文字的绘制。创建的第二Canvas标签属于离屏画布,不影响第一Canvas标签中UI的显示,当再次打开一个页面时,也不影响再次打开的页面的显示。
在上述实施例的基础上,如果再次接收到文字输入指令或文字插入指令时,参见图6,为本申请实施例提供的又一种智能电视UI文本框的文字实现方法。
在步骤S110中,如果接收到文字输入指令或文字插入指令,则根据所述光标在所述第一Canvas标签的文本框中的坐标位置,确定所述光标在所述第二Canvas标签上的坐标位置。
在上述实施例中可知,在第二Canvas标签中绘制的文字转换为图片后再截取,因此,在第一Canvas标签的文本框中的文字是图片格式,所以,在图片格式的文字中无法实现文字输入和文字插入操作。
此时,如果接收到文字输入指令或文字插入指令,则根据光标在第一Canvas标签的文本框中的坐标位置,确定光标在第二Canvas标签上的坐标位置。由于第二Canvas标签中绘制文字的坐标位置与第一Canvas标签中文本框的坐标位置对应,可通过第一Canvas标签中光标在文本框中的文字位置,确定光标在第二Canvas标签上的坐标位置。
在步骤S111中,在所述第二Canvas标签上所述光标的坐标位置处输入文字或插入文字。
例如,可计算在第一Canvas标签的文本框中,光标位置倒数第三个字的位置坐标处,因此,光标在第二Canvas标签上绘制文字的倒数第三个字的位置。如果在该位置坐标处插入文字时,在第二Canvas标签的该位置处插入文字。
此时,在第二Canvas标签上截取文字,并将截取文字重新绘制在第一Canvas标签的文本框中,从而实现在文本框中的文字是图片格式的时候,输入或插入文字。
由上述描述可知,本申请实施例中,对于文本框中的文字是图片格式的情况下,实现文字输入或插入。有效解决基于Canvas实现文本框中文字的输入和插入,简化UI架构,并且不影响第一Canvas标签上UI的显示。
与本申请智能电视UI文本框的文字实现方法相对应,本申请还提供了智能电视UI文本框的文字实现装置。
参见图7,为本申请实施例提供的一种智能电视UI文本框的文字实现装置结构示意图,包括:
获取模块,用于获取在第一Canvas标签上文本框中光标的位置坐标以及文本框中当前文字的长度;第一输入文字和插入文字模块,用于当接收到文字输入指令或文字插入指令后,如果文本框中当前文字的长度小于文本框的长度,则在光标的位置坐标处绘制输入文字或插入文字,以及每输入或插入一个文字,光标的位置坐标和文本框中文字的长度加预设字符长度;文字删除模块,用于当接收到文字删除指令后,在光标的位置坐标处删除文字,以及每删除一个文字,光标的位置坐标和文本框中文字的长度减预设字符长度;光标绘制模块,用于当文字输入、插入或删除完成后,在光标的位置坐标处绘制光标。
其中,参见图8,为本申请实施例提供的光标绘制模块结构示意图,光标绘制模块包括:初始绘制模块,用于在光标的坐标位置处绘制初始透明度值alpha等于1的光标;第一光标绘制模块,用于如果光标的透明度值alpha等于1,则将透明度值alpha减去预设值,直到透明度值alpha等于0;第二光标绘制模块,用于如果透明度值alpha等于0,则将透明度值alpha加上预设值,直到透明度值alpha等于1。
参见图9,为本申请实施例提供的另一种智能电视UI文本框的文字实现装置结构示意图,还包括:Canvas标签创建模块,用于接收判断模块的判断结果,如果文本框中当前文字的长度大于或等于文本框的长度,则创建第二Canvas标签;第一文字绘制模块,用于将文本框中的当前文字和输入文字或插入文字按照文字顺序绘制在第二Canvas标签上;图片转化模块,用于将绘制在第二Canvas标签上的绘制文字转化成图片;第一截取模块,用于由图片的最后一个文字开始,向前截取与文本框长度相同的文字;第二文字绘制模块,用于将截取的文字绘制在第一Canvas标签的文本框中,以及光标的位置坐标和文本框中文字的长度不变。
参见图10,为本申请实施例提供的再一种智能电视UI文本框的文字实现装置结构示意图,还包括:确定模块,用于如果接收到文字插入指令或文字删除指令,则根据光标在所述第一Canvas标签的文本框中的坐标位置,确定光标在所述第二Canvas标签上的坐标位置;第二插入文字和删除文字模块,用于在第二Canvas标签上光标的坐标位置处插入文字或删除文字。
由上述实施例提供的智能电视UI文本框的文字实现装置可知,本装置基于Canvas标签绘制UI,并且在实现UI的文本框中文字的输入、插入和删除时,不需要使用input标签,也不需要创建DOM层,直接在文本框中绘制文字,从而简化UI架构,有利于开发和维护。
本领域技术人员在考虑说明书及实践这里发明的公开后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。