CN110891190A - 一种弹幕显示方法、装置及电子设备 - Google Patents

一种弹幕显示方法、装置及电子设备 Download PDF

Info

Publication number
CN110891190A
CN110891190A CN201811029870.6A CN201811029870A CN110891190A CN 110891190 A CN110891190 A CN 110891190A CN 201811029870 A CN201811029870 A CN 201811029870A CN 110891190 A CN110891190 A CN 110891190A
Authority
CN
China
Prior art keywords
bullet screen
screen
animation
textview
textview control
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
Application number
CN201811029870.6A
Other languages
English (en)
Other versions
CN110891190B (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.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology 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 Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201811029870.6A priority Critical patent/CN110891190B/zh
Publication of CN110891190A publication Critical patent/CN110891190A/zh
Application granted granted Critical
Publication of CN110891190B publication Critical patent/CN110891190B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/431Generation of visual interfaces for content selection or interaction; Content or additional data rendering
    • H04N21/4312Generation of visual interfaces for content selection or interaction; Content or additional data rendering involving specific graphical features, e.g. screen layout, special fonts or colors, blinking icons, highlights or animations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • G06F9/44526Plug-ins; Add-ons
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/431Generation of visual interfaces for content selection or interaction; Content or additional data rendering
    • H04N21/4312Generation of visual interfaces for content selection or interaction; Content or additional data rendering involving specific graphical features, e.g. screen layout, special fonts or colors, blinking icons, highlights or animations
    • H04N21/4316Generation of visual interfaces for content selection or interaction; Content or additional data rendering involving specific graphical features, e.g. screen layout, special fonts or colors, blinking icons, highlights or animations for displaying supplemental content in a region of the screen, e.g. an advertisement in a separate window
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/47End-user applications
    • H04N21/478Supplemental services, e.g. displaying phone caller identification, shopping application
    • H04N21/4788Supplemental services, e.g. displaying phone caller identification, shopping application communicating with other users, e.g. chatting
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/47End-user applications
    • H04N21/488Data services, e.g. news ticker
    • H04N21/4884Data services, e.g. news ticker for displaying subtitles

Abstract

本发明实施例公开了一种弹幕显示方法、装置及电子设备。本发明实施例方法包括:构建一个显示弹幕的管理队列;建立弹幕textView控件与弹幕的唯一标识符之间的对应关系;获取用户的弹幕显示设置指令;取出当前正在显示的弹幕textView控件对应的目标唯一标识符,找到对应的目标textView控件;计算弹幕平滑变化的时间dT;根据弹幕显示区域高度设置信息,计算在dT时间内运动的垂直距离和垂直速度Vy;根据dT和Vy为所述目标textView控件构建一个垂直动画;将预先获取的水平动画和垂直动画添加到组合动画的对象中;通过调用组合动画开启水平动画和垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。本发明实施例使得弹幕切换更加平滑,弹幕显示更加合理。

Description

一种弹幕显示方法、装置及电子设备
技术领域
本发明涉及视频播放技术领域,特别涉及一种弹幕显示方法、装置及电子设备。
背景技术
随时网络通信技术的进步和宽带网络的提速,网络视频应用在各个行业得到了越来越广泛的开展。直观而生动的高清视频应用,可以极大地拉近用户之间的距离,并达到最好的交流效果,而且成本相对最低,所以得到了各行业用户的普遍欢迎。
弹幕是互联网视频的一大特色。弹幕指直接显现在视频上的评论,可以以滚动、停留甚至更多动作特效方式出现在视频上,是观看视频的人发送的简短评论。“弹幕视频”顾名思义即带有“弹幕”的视频。很多网站提供视频发送弹幕的功能。
在现有技术中,弹幕显示方式通常是:每条弹幕信息占用一行,然后弹幕信息从对应行的左侧出现后,滚动显示至右侧消失;或者,弹幕信息从该行的右侧出现,滚动显示至左侧消失。
但是,当弹幕内容过多时,容易影响用户对视频的正常观看。现有技术中不支持对弹幕显示的个性化定制,当弹幕内容影响观看时,用户只能选择关闭全部弹幕。
发明内容
本发明实施例提供了一种弹幕显示方法、装置及电子设备,支持弹幕显示的个性化设置,使得弹幕显示更加合理。
第一方面,本申请提供了一种弹幕显示方法,该方法包括:
构建一个显示弹幕的管理队列,所述管理队列用于维护当前正屏幕中间显示的弹幕信息;
建立弹幕textView控件与弹幕的唯一标识符之间的对应关系,所述弹幕的唯一标识符是一个String类型的数据;
当弹幕准备进入屏幕执行移动动画的时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符;
将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到所述管理队列中;
当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出所述管理队列;
获取用户的弹幕显示设置指令,所述指令中包括弹幕显示区域高度设置信息;
根据所述指令从所述管理队列中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件;
设定所述目标textView控件在屏幕水平移动距离Sx,所述Sx小于屏幕宽度;
将弹幕的水平移动速度标记为Vx,通过Sx/Vx计算弹幕平滑变化的时间dT;
根据所述弹幕显示区域高度设置信息,计算在dT时间内运动的垂直距离和垂直速度Vy;
获取所述目标textView控件预设的水平动画;
根据dT和Vy为所述目标textView控件构建一个垂直动画;
定义一个组合动画,并将所述水平动画和所述垂直动画添加到组合动画的对象中;
通过调用组合动画开启水平动画和垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。
第二方面,本申请提供一种弹幕显示装置,该装置包括:
构建单元,用于构建一个显示弹幕的管理队列,所述管理队列用于维护当前正屏幕中间显示的弹幕信息;
建立单元,用于建立弹幕textView控件与弹幕的唯一标识符之间的对应关系,所述弹幕的唯一标识符是一个String类型的数据;
队列管理单元,用于当弹幕准备进入屏幕执行移动动画的时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符;将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到所述管理队列中;当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出所述管理队列;
获取单元,用于获取用户的弹幕显示设置指令,所述指令中包括弹幕显示区域高度设置信息;
查找单元,用于根据所述指令从所述管理队列中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件;
计算单元,用于设定所述目标textView控件在屏幕水平移动距离Sx,所述Sx小于屏幕宽度;将弹幕的水平移动速度标记为Vx,通过Sx/Vx计算弹幕平滑变化的时间dT;根据所述弹幕显示区域高度设置信息,计算在dT时间内运动的垂直距离和垂直速度Vy;
动画处理单元,用于获取所述目标textView控件预设的水平动画;根据dT和Vy为所述目标textView控件构建一个垂直动画;定义一个组合动画,并将所述水平动画和所述垂直动画添加到组合动画的对象中;
显示单元,用于通过调用组合动画开启水平动画和垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。
第三方面,本发明还提供一种电子设备,包括:存储器,处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时可以实现第一方面中任一所述的方法。
第四方面,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面中任一所述的方法。
本发明实施例通过构建一个显示弹幕的管理队列;建立弹幕textView控件与弹幕的唯一标识符之间的对应关系;当弹幕准备进入屏幕执行移动动画的时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符;将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到管理队列中;当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出管理队列;获取用户的弹幕显示设置指令;根据指令从管理队列中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件;设定所述目标textView控件在屏幕水平移动距离Sx,所述Sx小于屏幕宽度;将弹幕的水平移动速度标记为Vx,通过Sx/Vx计算弹幕平滑变化的时间dT;根据弹幕显示区域高度设置信息,计算在dT时间内运动的垂直距离和垂直速度Vy;获取目标textView控件预设的水平动画;根据dT和Vy为所述目标textView控件构建一个垂直动画;定义一个组合动画,并将所述水平动画和所述垂直动画添加到组合动画的对象中;通过调用组合动画开启水平动画和垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。本发明实施例通过调整Sx的大小来调整整个切换的平滑程度,进而实现了平滑切换的目标,通过这样的切换可以使得弹幕切换更加平滑,弹幕显示更加合理。
附图说明
图1是本发明实施例中弹幕显示方法的一个实施例示意图;
图2是本发明是实施例中弹幕显示方法的另一个实施例示意图;
图3是本发明是实施例中弹幕显示方法的另一个实施例示意图;
图4是本发明是实施例中弹幕显示方法的另一个实施例示意图;
图5是本发明是实施例中弹幕显示方法的另一个实施例示意图;
图6是本发明实施例中弹幕显示装置的一个实施例示意图;
图7是本发明实施例中弹幕显示装置的另一个实施例示意图;
图8是本发明实施例中电子设备的一个实施例示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明实施例中弹幕显示方法应用于弹幕显示装置,该装置位于电子设备中,该电子设备可以是手机、平板电脑或者个人电脑等电子设备,也可以是未来出现有显示屏的电子设备等。
请参阅图1,本发明实施例中弹幕显示方法的一个实施例包括:
S101、构建视图控件;
在实现屏幕弹幕的时候首先需要动态构建一个视图控件,弹幕通常是一个文本信息,因此本发明在动态构建该弹幕文本信息的时候可以是通过Android系统中的TextView控件来进行构建的,即调用TextView构建一个空的textView控件,具体的,调用TextViewtextView=new TextView()构建一个空的textView控件。
S102、在视图控件填充弹幕相关的样式信息。
在构建视图控件之后,接下来需要对该新构建的视图控件填充弹幕相关的样式信息,进一步的,所述在所述视图控件填充弹幕相关的样式信息,包括:通过调用textView控件中的textView.setTextColor(Color.WHITE)将弹幕信息的文本信息设置成白色;通过调用textView.setSize(15sp)设置字体为15sp大小;通过调用textView.setText来设置具体的弹幕内容信息。这样给就完成了动态构建的弹幕信息textView控件的样式信息填充。构建完成上述textView控件后我们需要将该控件添加到弹幕区域中,为了方便描述我们将弹幕内容的容器标记为danmuContainer,danmuContainer中后续是容纳了具体的弹幕信息内容的。
S103、对视图控件的位置信息进行初始化操作。
在danmuContainer容器中添加textView控件之前首先需要对textView控件的位置信息进行相应的初始化操作。
S104、获取布局参数对象。
所述获取布局参数对象包括:通过调用ViewGroup.layoutParams params=newViewGroup.layoutParams()方法来得到一个ViewGroup的布局参数对象params。
S105、根据布局参数对象设置弹幕布局位置信息。
具体的,所述根据所述布局参数对象设置弹幕布局位置信息,包括:调用params对象中的params.width=ViewGroup.layoutParams.WRAP_CONTENT将宽度信息设置成包裹内容大小,也就是说宽度能够随着字体的长度动态变;同理,通过params对象中的params.height=ViewGroup.layoutParams.WRAP_CONTENT将高度信息设置成包裹内容,动态适配文字的高度信息。
S106、将弹幕布局位置信息添加到视图控件中。
设置弹幕布局位置信息之后,通过调用textView.setLayoutParams(params)方法将设置好的弹幕布局位置信息应用到动态构建的textView控件上,这样textView控件就具备了位置相关的信息了。
S107、将视图控件添加到预设的弹幕容器对象中。
具体的,通过调用danmuContainer对象中的danmuContainer.addView(textView)将动态构建好的textView控件添加到弹幕容器对象danmuContainer中。
S108、获取用户的弹幕显示设置指令。
具体的,该指令中包括弹幕显示区域高度设置信息,弹幕显示区域高度设置信息中包括设置弹幕显示区域高度的信息,以弹幕显示由全屏切换到半屏为例,弹幕全屏高度为danmuHeight,则弹幕显示区域高度设置信息中弹幕显示区域高度信息为danmuHeight/2。
本发明实施例中,通过调用danmuContainer容器中的danmuContainer.getHeight()来获取到弹幕容器的整个高度信息,通常情况下danmuContainer容器的高度信息和视频窗口的高度信息是完全相同的,本发明实施例中将danmuContainer.getHeight()的值标记为danmuHeight;接下来通过调用一个随机函数来获取一个随机高度信息,具体是通过调用Randomrandom=new Random()来构建一个随机数生成器random,通过调用random对象中的random.netFloat(danmuHeight)来获取0到danmuHeight之间的一个高度信息,我们将获取的该高度信息标记为randomHeight。接下来需要动态改变上述生成的textView控件在父布局danmuContainer中的高度位置信息,具体是通过调用params.marginTop=randomHeight来设置textView控件在父布局中距顶部的位置信息。后续就是通用的动画效果,将控件从屏幕一侧移动到另外一侧,本发明实施例中可以认为该动画效果的实现是一个现有技术,此处不做过多描述。
S109、根据指令调整视图控件在弹幕容器对象中的高度位置信息,根据高度位置信息显示视频中弹幕。
同样以切换全屏和半屏为例,切换全屏和半屏的按钮假设定义为button,通过为button设置点击的监听器,具体是通过调用button.setOnClickListener方法来为button设置了一个监听器信息。当用户点击按钮的时候回触发监听器的回调函数。本发明在回调函数中动态修改上述danmuHeight的值信息,具体是通过调用danmuHeight=danmuHeight/2,这样danmuHeight的值信息就是原来的一半了。再次执行上述逻辑的时候,弹幕的位置信息就只能占用为原来屏幕一半以内的一个随机值,这样就完成了半屏弹幕的切换工作。如果用户在半屏弹幕的时候再次点击该按钮,仅仅需要通过调用danmuHeight=danmuHeight*2的方法来将其进行还原到全屏幕的状态。这样就完成了全屏到半屏弹幕和半屏弹幕到全屏弹幕的切换方法,实现根据所述高度位置信息显示视频中弹幕。
本发明实施例通过构建视图控件;在视图控件填充弹幕相关的样式信息;对视图控件的位置信息进行初始化操作;获取布局参数对象;根据布局参数对象设置弹幕布局位置信息;将弹幕布局位置信息添加到视图控件中;将视图控件添加到预设的弹幕容器对象中;获取用户的弹幕显示设置指令;根据指令调整视图控件在所述弹幕容器对象中的高度位置信息,根据高度位置信息显示视频中弹幕。本发明实施例能够有效的将弹幕内容显示高度进行自由切换,支持弹幕显示的个性化设置,通过这样的切换可以使得屏幕上的视频信息得以正常的展示出来,使得弹幕显示更加合理。
上述弹幕切换过程存在这样一个中间态的问题那就是如果一条弹幕已经在屏幕的下设定部分执行动画的时候,以全屏切换半屏为例,点击了切换为半屏弹幕状态的按钮的情况下必须,只有新的弹幕才是半屏以内的,但是当前正在执行的弹幕无法实现半屏以内显示,这样就会导致我们点击了半屏弹幕按钮后可能还需要等待一小段时间才能够显示出半屏弹幕来,这样就会导致整个用户体验变差,给用户的感觉就是点击了半屏弹幕不能够马上生效,而是需要过一段时间才能生效的错觉。
本发明实施例中针对上述问题给出了一套解决方法,通过该方法能够有效的解决切换速度慢的问题,能够当用户点击半屏弹幕的时候自动将当前正在显示的内容全部切换到设定的显示范围以内。具体请参阅图2,本发明实施例中弹幕显示方法的另一个实施例包括:
S201、构建一个显示弹幕的管理队列。
具体的,构建一个显示弹幕的管理队列,该管理队列用于维护当前正屏幕中间显示的弹幕信息,构建的管理队列信息是一个Queue<String>danmuShowQueue,接下来需要对该当前正在显示的弹幕队列danmuShowQueue进行初始化操作,具体的初始化方法是danmuShowQueue=new Queue<String>()。
S202、建立弹幕textView控件与弹幕的唯一标识符之间的对应关系。
上述构建的管理队列danmuShowQueue中存储的是String类型的数据,传统方案中弹幕信息是一个textView控件,如果在管理队列中去缓存真实的弹幕textView控件信息的话,由于textView控件的内存开销较大,这样就会导致danmuShowQueue队列的内存开销会非常大,但是又为了确保弹幕信息的维护,因此本发明实施例中存储的是弹幕的唯一标识符hashCode,该唯一标识符hashCode是一个String类型的数据。由于弹幕的唯一标识符hashCode的内存开销非常小,这样就能够有效的建立弹幕textView控件与唯一标识符hashCode之间的对应关系。
S203、当弹幕准备进入屏幕执行移动动画的时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符;
具体的当弹幕准备进入屏幕执行移动动画的时候,获取该textView对象中的hashCode,具体是通过调用textView.hashCode()方法来获取到当前屏幕显示的textView控件对应的弹幕唯一标识符tvHashCode。
S204、将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到管理队列中。
调用danmuShowQueue队列中的danmuShowQueue.add(tvHashCode)将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到danmuShowQueue队列中。
S205、当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出管理队列。
具体的,当当前屏幕显示的textView控件移出屏幕时,通过调用danmuShowQueue.poll()将当前屏幕显示的textView控件对应的弹幕的唯一标识符从danmuShowQueue队列中移除出去。
本发明实施例中,当多条弹幕在屏幕上显示的时候按照先后顺序往danmuShowQueue队列中添加数据和移除数据,由于基本的弹幕信息都是匀速运行的,因此先进来的数据会先从屏幕上消失掉。通过动态的添加和删除,最终danmuShowQueue中的数据永远都是当前屏幕中正在显示的弹幕内容。
S206、获取用户的弹幕显示设置指令,所述指令中包括弹幕显示区域高度设置信息。
本步骤的实施过程具体可参照步骤S108中描述的内容。
S207、根据指令从管理队列中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件。
具体的,即从danmuShowQueue队列中取出所有的当前正在显示的textView控件对应的目标唯一标识符信息,通过弹幕的唯一标识符信息找到对应的目标textView控件。
S208、获取所述目标textView控件当前在所述弹幕容器对象中的高度位置信息。
具体的,获取所述目标textView控件当前在所述弹幕容器对象中的高度位置信息包括:调用目标textView控件中的textView.getLayoutParams()获取到该目标textView控件的布局参数信息params;通过调用params中的params.getHeight()获取所述目标textView控件在所述弹幕容器对象中的高度位置信息。
S209、根据所述弹幕显示区域高度设置信息和所述目标textView控件当前在所述弹幕容器对象中的高度位置信息,调整所述目标textView控件在所述弹幕容器对象中的高度位置信息;
S210、根据调整后的所述目标textView控件在所述弹幕容器对象中的高度位置信息显示视频中弹幕。
以弹幕显示由全屏切换到半屏显示为例,当检测到用户点击切换半屏的状态的时候,即接收到用户的弹幕显示设置指令,就需要从danmuShowQueue对内中取出所有的当前正在显示的弹幕textView的hashCode信息,通过hashCode找到对应的textView控件,然后调用textView控件中的textView.getLayoutParams()来获取到该textView控件的布局参数信息params,接下来我们通过调用params中的params.getHeight()方法来获取到textView所在的高度信息,并将该高度信息标记为tvHeight。
然后通过tvHeight=tvHeight/2来将tvHeight的值信息变为原来的一半。通过调用上述获取的params对象中的params.height=tvHeight方法将新的tvHeight的值信息存储到params中,在调用该textView对象中的textView.setLayoutParams(params)来将新的布局信息设置到textView控件中,这样该textView控件的高度信息就变为原来的一半了,因此整个弹幕就变成了半屏弹幕的目标了。
本发明实施例中通过唯一标识符找到对应的textView控件,实现弹幕快速切换生效,能够有效的解决切换速度慢的问题,当用户点击设置弹幕高度之后自动将当前正在显示的内容全部切换到设置高度范围之内进行显示,弹幕显示切换效率高。
图2所示实施例中实现的时候默认条件是弹幕是匀速运行的,这样才能够保证danmuShowQueue队列中数据的准确性。但是需求总是变化的,当弹幕的运动速度是非匀速的时候上述方案就无法正常执行了。因此本发明实施例中还提供一种弹幕显示方法,解决上述方案中非匀速情况下弹幕数据是如何进行维护的。
请参阅图3,为本发明实施例中弹幕显示方法的另一个实施例示意图,该方法包括:
S301、定义一个List集合。
由于上述方案中danmuShowQueue是一个队列,队列的数据结构有一个顺序性,对于本实施例中方案算法的实施与开展不是非常适合,因此本实施例中在设计数据集合的时候不采用队列danmuShowQueue的方式来进行实现,而是采用了集合List来存储当前正在运行的弹幕信息,即所述List集合用于存储当前正在运行的弹幕信息。
定义一个List集合,具体的定义方法是List<String>listDanmu,其中,listDanmu即为该List集合,接下来需要对listDanmu集合进行初始化操作,具体的初始化方法是通过调用listDanmu=new List<String>()方法来对集合listDanmu进行初始化操作。
S302、构建一个Map变量,并在Map变量的codeToTextView集合内部构建弹幕TextView控件与弹幕的唯一标识符之间的映射关系。
其中,所述弹幕的唯一标识符是一个String类型的数据。
构建一个Map变量:private Map<TextView,String>codeToTextView;
在Map变量codeToTextView集合内部构建一个TextView控件与弹幕的唯一标识符hashCode之间的映射关系。
另外,在对codeToTextView集合使用之前,首先需要对codeToTextView集合进行初始化操作,具体对codeToTextView集合初始化的方法是通过调用codeToTextView=newHashMap<TextView,String>()实现。
S303、当弹幕准备进入屏幕执行移动动画时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符,将当前屏幕显示的textView控件对应的弹幕的唯一标识符添加到List集合中。
当弹幕准备进入屏幕执行移动动画时,即textView控件需要在屏幕上显示的时候,首先通过调用textView.hashCode()方法来获取当前屏幕显示的textView控件对应的弹幕的唯一标识符hashCode值信息tvHashCode。
所述将当前屏幕显示的textView控件对应的弹幕的唯一标识符添加到List集合中,包括:通过调用listDanmu.add(tvHashCode)将当前屏幕显示的textView控件对应的弹幕的唯一标识符添加到List集合中。
S304、将当前屏幕显示的textView控件与弹幕的唯一标识符的映射关系存储到codeToTextView集合中。
具体的,所述将当前屏幕显示的textView控件与弹幕的唯一标识符的映射关系存储到codeToTextView集合中,包括:通过调用codeToTextView.put(textView,tvHashCode)方法将当前屏幕显示的textView控件与弹幕的唯一标识符的映射关系存储到codeToTextView集合中。
S305、当当前屏幕显示的textView控件移出屏幕时,通过codeToTextView集合中的映射关系获取当前屏幕显示的textView控件所对应的弹幕的唯一标识符,并将当前屏幕显示的textView控件所对应的弹幕的唯一标识符从List集合中移除。
具体的,所述当当前屏幕显示的textView控件移出屏幕时,通过codeToTextView集合中的映射关系获取当前屏幕显示的textView控件所对应的弹幕的唯一标识符,并将当前屏幕显示的textView控件所对应的弹幕的唯一标识符从List集合中移除,包括:当当前屏幕显示的textView控件移出屏幕时,通过调用codeToTextView.get(textView)获取当前屏幕显示的textView控件所对应的弹幕的唯一标识符;
通过调用listDanmu.remove(hashCode)将当前屏幕显示的textView控件所对应的弹幕的唯一标识符从list集合中移除。
通过上述的实现方式可以看出,无论哪个textView控件移出,都是从集合listDanmu移出该textView控件对应的hashCode,这样就避免了上述方案中管理队里的顺序性问题,从而有效的保证了listDanmu集合中的数据的准确性,弹幕速度的快慢对listDanmu集合中的数据的准确性无任何影响。
S306、获取用户的弹幕显示设置指令,所述指令中包括弹幕显示区域高度设置信息。
具体可以参照上述实施例中描述的内容。
S307、根据所述指令从所述List集合中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件;
具体的,所述根据所述指令从所述List集合中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件,包括:从list集合中取出所有的当前正在显示的textView控件对应的目标唯一标识符信息,通过弹幕的唯一标识符信息找到对应的目标textView控件。
S308、获取所述目标textView控件当前在所述弹幕容器对象中的高度位置信息。
具体的,所述获取所述目标textView控件当前在所述弹幕容器对象中的高度位置信息,包括:调用目标textView控件中的textView.getLayoutParams()获取到该目标textView控件的布局参数信息params;通过调用params中的params.getHeight()获取所述目标textView控件在所述弹幕容器对象中的高度位置信息。
S309、根据所述弹幕显示区域高度设置信息和所述目标textView控件当前在所述弹幕容器对象中的高度位置信息,调整所述目标textView控件在所述弹幕容器对象中的高度位置信息。
S310、根据调整后的所述目标textView控件在所述弹幕容器对象中的高度位置信息显示视频中弹幕。
步骤S309和S310具体可以参照上面实施例中描述的内容,此处不再赘述。
本发明实施例采用了集合List来存储当前正在运行的弹幕信息,从而有效的保证了listDanmu集合中的数据的准确性,弹幕速度的快慢对集合中的数据的准确性无任何影响。
上述图2所示实施例和图3所示实施例在弹幕切换速度上有明显的提升,但是也存在一些问题,那就是切换过于突兀,突然一下全屏弹幕直接闪屏一下变成半屏弹幕效果,这样给人的感觉有点突然,看起来显示屏幕闪烁了一下,给用户的用户体验非常不友好,本发明实施例中还提供一个更加友好的切换过度方式,在保证切换速度的情况下,提供一种更加自然的过度切换方法,具体请参阅图4,为本发明实施例中弹幕显示方法的另一个实施例示意图,该方法包括:
S401、构建一个显示弹幕的管理队列。
其中,该管理队列用于维护当前正屏幕中间显示的弹幕信息;构建的管理队列信息是一个Queue<String>danmuShowQueue,接下来需要对该当前正在显示的弹幕队列danmuShowQueue进行初始化操作,具体的初始化方法是danmuShowQueue=new Queue<String>()。
S402、建立弹幕textView控件与弹幕的唯一标识符之间的对应关系。
上述构建的管理队列danmuShowQueue中存储的是String类型的数据,传统方案中弹幕信息是一个textView控件,如果在管理队列中去缓存真实的弹幕textView控件信息的话,由于textView控件的内存开销较大,这样就会导致danmuShowQueue队列的内存开销会非常大,但是又为了确保弹幕信息的维护,因此本发明实施例中存储的是弹幕的唯一标识符hashCode,该唯一标识符hashCode是一个String类型的数据。
由于弹幕的唯一标识符hashCode的内存开销非常小,这样就能够有效的建立弹幕textView控件与唯一标识符hashCode之间的对应关系。
S403、当弹幕准备进入屏幕执行移动动画的时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符。
具体的当弹幕准备进入屏幕执行移动动画的时候,获取该textView对象中的hashCode,具体是通过调用textView.hashCode()方法来获取到当前屏幕显示的textView控件对应的弹幕唯一标识符tvHashCode。
S404、将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到管理队列中。
具体的当弹幕准备进入屏幕执行移动动画的时候,获取该textView对象中的hashCode,具体是通过调用textView.hashCode()方法来获取到当前屏幕显示的textView控件对应的弹幕唯一标识符tvHashCode。
S405、当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出管理队列。
具体的,当当前屏幕显示的textView控件移出屏幕时,通过调用danmuShowQueue.poll()将当前屏幕显示的textView控件对应的弹幕的唯一标识符从danmuShowQueue队列中移除出去。
本发明实施例中,当多条弹幕在屏幕上显示的时候按照先后顺序往danmuShowQueue队列中添加数据和移除数据,由于基本的弹幕信息都是匀速运行的,因此先进来的数据会先从屏幕上消失掉。通过动态的添加和删除,最终danmuShowQueue中的数据永远都是当前屏幕中正在显示的弹幕内容。
S406、获取用户的弹幕显示设置指令;根据所述指令从所述管理队列中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件;
具体的,可以参照步骤S206和S207中的描述内容,此处不再赘述。
S407、设定所述目标textView控件在屏幕水平移动距离Sx。
为了实现平滑切换成半屏弹幕,在设计的时候预期在水平移动Sx的距离的时候完成整个切换过程。其中Sx是一个阈值该阈值一定是小于屏幕的宽度的,通过调整Sx的距离大小可以间接的调整过度的平滑度。
S408、将弹幕的水平移动速度标记为Vx,通过Sx/Vx计算弹幕平滑变化的时间dT。
具体的,弹幕的移动速度通常是确定的,将弹幕的水平移动速度标记为Vx,因此就可以通过Sx/Vx的方式来计算出平滑变化的时间dT。
S409、根据所述弹幕显示区域高度设置信息,计算在dT时间内运动的垂直距离和垂直速度Vy。
以弹幕由全屏切换到半屏为例,对于垂直方向需要变换的距离是tvHeight-tvHeight/2=tvHeight/2,也就是说需要在dT的时间内完成的垂直距离的为tvHeight/2,因此就可以计算出垂直的运动速度为tvHeight/2dT,我们将该速度标记为Vy。
根据物理的速度的关系,将速度分解成Vx和Vy这样2个方向,那么整个textView控件运动的真实方向将会是斜线方向。即最终textView控件的运动轨迹将会是一条匀速斜线的运动,这样就不会出现直接切换到高度的1/2的闪屏的问题了。
S410、获取目标textView控件预设的水平动画,根据dT和Vy为所述目标textView控件构建一个垂直动画;定义一个组合动画,并将所述水平动画和所述垂直动画添加到组合动画的对象中。
本实施例中,获取目标textView控件预设的水平动画,具体获取的方式是通过调用textView控件中的textView.getAnimation()就可以得到当前的水平动画animX。
由于得到了Vy和和dT,因此可以对textView控件添加一个纵向运动的动画,具体的动画构建过程是定义一个ObjectAnimator类型的mAnimatorTranslateY对象。具体的,根据dT和Vy为所述目标textView控件构建一个垂直动画包括:
定义一个ObjectAnimator类型的mAnimatorTranslateY对象;
调用ObjectAnimator.ofFloat(textView,"translationY",tvHeight,tvHeight’)构建运动速度为Vy的垂直动画,其中,该ObjectAnimator.ofFloat函数是对目标textView控件执行垂直动画,该垂直动画的起始点是tvHeight,目标结束点是tvHeight’,返回值的是mAnimatorTranslateY对象信息;
调用mAnimatorTranslateY对象中的mAnimatorTranslateY.setDuration(dT)将垂直动画的执行周期dT设置到对象mAnimatorTranslateY中。
本发明实施例中,需要定义一个组合动画AnimationSet animSet,并且通过调用AnimationSet中的构造函数来对animSet进行初始化,具体是通过调用animSet=newAnimationSet()来进行初始化。然后调用animSet.add(animX)和调用animSet.add(mAnimatorTranslateY),这样就将水平动画和垂直动画都添加到了animSet对象中。
S411、通过调用组合动画开启水平动画和垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。
由于将水平动画和垂直动画都添加到了animSet对象中,最终通过调用animSet对象中的animSet.startAnim()方法开启水平和垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。
本发明实施例通过调整Sx的大小来调整整个切换的平滑程度,进而实现了平滑切换的目标,通过这样的切换可以使得弹幕切换更加平滑,弹幕显示更加合理。
上述定义的Sx是一个固定值信息,当弹幕信息移动到屏幕的靠近结束为止的时候,此时就会出现一个问题那就是剩余距离比Sx要小,此时如果按照上述的实现方式来执行就会导致该弹幕无法移动到设定范围内就已经移出屏幕了,这样的效果给人的感觉就是控制逻辑存在异常,本发明实施例中针对该问题提供了一种解决方案,使得这种特殊场景下的时候弹幕依旧可以移动到范围内再移出。具体的,请参阅图5,为本发明实施例中弹幕显示方法的另一个实施例示意图,该方法包括:
S501、构建一个显示弹幕的管理队列。
S502、建立弹幕textView控件与弹幕的唯一标识符之间的对应关系。
其中,所述弹幕的唯一标识符是一个String类型的数据。
S503、当弹幕准备进入屏幕执行移动动画的时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符。
S504、将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到管理队列中。
S505、当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出管理队列。
S506、获取用户的弹幕显示设置指令,根据所述指令从所述管理队列中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件。
S507、设定目标textView控件在屏幕水平移动距离Sx。
本实施例中步骤S501~S507具体可以参照图4所示实施例中步骤S401~S407中的具体实施过程,此处不再赘述。
S508、计算目标textView控件完全移出屏幕所需要移动的距离reallyDistance。
当用户点击弹幕切换按钮的时候,首先获取textView控件当前所在的位置信息,具体的获取方法是通过调用textView控件中的textView.getLayoutParams()来获取到当前的textView控件的布局参数信息layoutParams,接下来调用layoutParams中的layoutParams.getWidth获取到的是当前textView控件所在的X轴的坐标信息,此处将该值标记为textViewX。
TextView控件本身是有一个自身的宽度信息的,上述获取到的位置信息通常都是textView控件的左上角所在的位置信息,因此视图完全移除出去的举例是需要加上textView控件本身的长度信息的,获取textView控件的长度信息的是通过调用textView控件中的textView.getWidth()来获取到textView自身的长度信息,此处将该长度信息标记为textViewWidth。
因此当前textView控件完全移出屏幕所需要移动的距离是textViewX+textViewWidth,此处将该具体标记为reallyDistance。
S509、比较Sx和reallyDistance之间的大小,若Sx的值比reallyDistance的值大,将弹幕的水平移动速度标记为Vx,通过reallyDistance/Vx计算弹幕平滑变化的时间dT。
具体的,就需要比较reallyDistance和Sx的大小信息,如果Sx的值比reallyDistance的值大,此时我们就以Sx的值为准,具体的实现方式如图4实施例中所示中所述。即若Sx的值比reallyDistance的值小,通过Sx/Vx计算弹幕平滑变化的时间dT’;根据所述弹幕显示区域高度设置信息,计算在dT’时间内运动的垂直距离和垂直速度Vy’;获取所述目标textView控件预设的水平动画;根据dT’和Vy’为所述目标textView控件构建一个第二垂直动画;定义组合动画,并将所述水平动画和第二垂直动画添加到组合动画的对象中;通过调用组合动画开启水平动画和第二垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。具体实施过程可参照图4所示实施例。
如果Sx的值比reallyDistance的值大,此时就说明剩余距离不足以将视图移动到屏幕内部,因此需要对该种情况做特殊处理,即将弹幕的水平移动速度标记为Vx,通过reallyDistance/Vx计算弹幕平滑变化的时间dT。
S510、根据弹幕显示区域高度设置信息,计算在dT’时间内运动的垂直距离和垂直速度Vy。
本实施例中,同样以半屏为例,获取到垂直移动距离tvHeight/2(具体获取方法如上述图4实施例中描述一致),如果垂直速度为tvHeight/2dT,将该速度标记为为Vy就会出现刚好移除出去的时候达到半屏以内,起始这种情况下就已经失去了进入半屏的意义了,为了能够保证视图textView控件在没有移出前到达半屏内,因此需要对Vy做一个特殊的处理,需要将Vy的速度提高到原来的1.5倍,也就是1.5Vy,这样就能够保证纵向的速度更快的运动,从而就能够在视图还没有移动出去情况下确保视图能够到达在半屏内部。
除了上述增加y轴速度一位,还可以采取将Vx的速度降低的方式来达到上述效果,例如可以将Vx的速度降低到原来的一半,也就是1/2Vx,这样达到的效果也是一致的,甚至是可以将上述两个效果进行叠加来达到一种更友好的过度体验。
S511、获取目标textView控件预设的水平动画;根据dT和1.5Vy为目标textView控件构建一个第一垂直动画;定义组合动画,并将水平动画和第一垂直动画添加到组合动画的对象中。
本实施例中,获取目标textView控件预设的水平动画,具体获取的方式是通过调用textView控件中的textView.getAnimation()就可以得到当前的水平动画animX。
所述根据dT和1.5Vy为所述目标textView控件构建一个第一垂直动画,包括:
定义一个ObjectAnimator类型的mAnimatorTranslateY对象;
调用ObjectAnimator.ofFloat(textView,"translationY",tvHeight,tvHeight’)构建运动速度为1.5Vy的第一垂直动画,其中,该ObjectAnimator.ofFloat函数是对目标textView控件执行第一垂直动画,该第一垂直动画的起始点是tvHeight,目标结束点是tvHeight’,返回值的是mAnimatorTranslateY对象信息;
调用mAnimatorTranslateY对象中的mAnimatorTranslateY.setDuration(dT)将第一垂直动画的执行周期dT设置到对象mAnimatorTranslateY中。
本发明实施例中,需要定义一个组合动画AnimationSet animSet,并且通过调用AnimationSet中的构造函数来对animSet进行初始化,具体是通过调用animSet=newAnimationSet()来进行初始化。然后调用animSet.add(animX)和调用animSet.add(mAnimatorTranslateY),这样就将水平动画和第一垂直动画都添加到了animSet对象中。
S512、通过调用组合动画开启水平动画和第一垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。
由于将水平动画和第一垂直动画都添加到了animSet对象中,最终通过调用animSet对象中的animSet.startAnim()方法开启水平和第一垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。
本发明实施例中通过比较textView控件完全移除屏幕的移动距离reallyDistance和Sx的大小,在reallyDistance小于Sx时,调整垂直移动速度到1.5Vy,鼻毛弹幕无法移动到设定范围内就已经移出屏幕的情况,在支持弹幕显示的个性化设置的同时使得弹幕显示更加合理。
下面介绍本发明实施例中弹幕显示装置的实施例。
请参阅图6,为本发明实施例中弹幕显示装置的一个实施例示意图,该装置包括:
构建单元601,用于构建视图控件;
填充单元602,用于在所述视图控件填充弹幕相关的样式信息;
初始化单元603,用于对所述视图控件的位置信息进行初始化操作;
第一获取单元604,用于获取布局参数对象;
设置单元605,用于根据所述布局参数对象设置弹幕布局位置信息;
添加单元606,用于将所述弹幕布局位置信息添加到所述视图控件中,并将所述视图控件添加到预设的弹幕容器对象中;
第二获取单元607,用于获取用户的弹幕显示设置指令,所述指令中包括弹幕显示区域高度设置信息;
显示单元608,用于根据所述指令调整所述视图控件在所述弹幕容器对象中的高度位置信息,根据所述高度位置信息显示视频中弹幕。
可选的,所述构建单元601具体用于:
调用TextView构建一个空的textView控件;
所述填充单元602具体用于:
通过调用textView对象中的textView.setTextColor(Color.WHITE)将弹幕信息的文本信息设置成白色;
通过调用textView.setSize(15sp)设置字体为15sp大小;
通过调用textView.setText来设置具体的弹幕内容信息。
可选的,所述第一获取单元604具体用于:
通过调用ViewGroup.layoutParams params=new ViewGroup.layoutParams()方法来得到一个ViewGroup的布局参数对象params;
所述设置单元605具体用于:
调用params对象中的params.width=ViewGroup.layoutParams.WRAP_CONTENT将宽度信息设置成包裹内容大小;
通过params对象中的params.height=ViewGroup.layoutParams.WRAP_CONTENT将高度信息设置成包裹内容,动态适配文字的高度信息。
可选的,所述添加单元606具体用于:
通过调用textView.setLayoutParams(params)将设置好的弹幕布局位置信息params应用到textView控件上;
调用danmuContainer对象中的danmuContainer.addView(textView将textView控件添加到弹幕容器对象danmuContainer中。
可选的,所述显示单元608具体用于:
通过调用danmuContainer容器中的danmuContainer.getHeight()获取到弹幕容器的整个高度信息danmuHeight;
通过调用Random random=new Random()构建一个随机数生成器random;
通过调用random对象中的random.netFloat(danmuHeight)获取0到danmuHeight之间的高度信息randomHeigh;
根据所述弹幕显示区域高度设置信息,通过调用params.marginTop=randomHeight方法设置textView控件在父布局中距顶部的位置信息,实现调整弹幕的高度位置信息,根据所述高度位置信息显示视频中弹幕。
请参阅图7,为本发明实施例中弹幕显示装置的另一个实施例示意图,该装置包括:
构建单元701,用于构建一个显示弹幕的管理队列,所述管理队列用于维护当前正屏幕中间显示的弹幕信息;
建立单元702,用于建立弹幕textView控件与弹幕的唯一标识符之间的对应关系,所述弹幕的唯一标识符是一个String类型的数据;
队列管理单元703,用于当弹幕准备进入屏幕执行移动动画的时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符;将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到所述管理队列中;当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出所述管理队列;
获取单元704,用于获取用户的弹幕显示设置指令,所述指令中包括弹幕显示区域高度设置信息;
查找单元705,用于根据所述指令从所述管理队列中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件;
计算单元706,用于设定所述目标textView控件在屏幕水平移动距离Sx,所述Sx小于屏幕宽度;将弹幕的水平移动速度标记为Vx,通过Sx/Vx计算弹幕平滑变化的时间dT;根据所述弹幕显示区域高度设置信息,计算在dT时间内运动的垂直距离和垂直速度Vy;
动画处理单元707,用于获取所述目标textView控件预设的水平动画;根据dT和Vy为所述目标textView控件构建一个垂直动画;定义一个组合动画,并将所述水平动画和所述垂直动画添加到组合动画的对象中;
显示单元708,用于通过调用组合动画开启水平动画和垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。
可选的,所述队列管理单元703具体用于:
通过调用textView.hashCode()获取当前屏幕显示的textView控件对应的弹幕的唯一标识符。
可选的,所述管理队列为danmuShowQueue队列,所述队列管理单元703具体还用于:
调用danmuShowQueue队列中的danmuShowQueue.add(tvHashCode)将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到danmuShowQueue队列中;
当当前屏幕显示的textView控件移出屏幕时,通过调用danmuShowQueue.poll()将当前屏幕显示的textView控件对应的弹幕的唯一标识符从danmuShowQueue队列中移除出去。
可选的,所述动画处理单元707具体用于:
定义一个ObjectAnimator类型的mAnimatorTranslateY对象;
调用ObjectAnimator.ofFloat(textView,"translationY",tvHeight,tvHeight’)构建运动速度为Vy的垂直动画,其中,该ObjectAnimator.ofFloat函数是对目标textView控件执行垂直动画,该垂直动画的起始点是tvHeight,目标结束点是tvHeight’,返回值的是mAnimatorTranslateY对象信息;
调用mAnimatorTranslateY对象中的mAnimatorTranslateY.setDuration(dT)将垂直动画的执行周期dT设置到对象mAnimatorTranslateY中。
本发明实施例中还提供一种电子设备,请参见图8,所述电子设备包括:
存储器801,处理器802及存储在所述存储器上并可在所述处理器上运行的计算机程序803,其中,所述处理器802执行所述计算机程序803时可以实现上述弹幕显示方法。
需要说明的是,本申请涉及的电子设备包括但不限于是:移动终端(手机、智能手机、PAD、笔记本电脑等等)、固定终端(计算机)。
为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。存储器801可用于存储计算机程序803,上述计算机程序包括软件程序、模块和数据,处理器802通过运行执行存储在存储器801的计算机程序803,从而执行电子设备的各种功能应用以及数据处理。
在具体的实施过程中,存储器801可用于存储软件程序以及模块,处理器802通过运行存储在存储器801的软件程序以及模块,从而执行电子设备的各种功能应用以及数据处理。存储器801可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(例如游戏类应用程序、聊天类应用程序)等;存储数据区可存储根据电子设备的使用所创建的数据(游戏配置数据、音频数据)等。此外,存储器801可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。处理器802是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器801内的软件程序和/或模块,以及调用存储在存储器801内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。可选的,处理器802可包括一个或多个处理单元;优选的,处理器802可集成应用处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等。
本发明实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介质可存储有程序,该程序执行时包括上述方法实施例中记载的弹幕显示方法的部分或全部步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

Claims (10)

1.一种弹幕显示方法,其特征在于,所述方法包括:
构建一个显示弹幕的管理队列,所述管理队列用于维护当前正屏幕中间显示的弹幕信息;
建立弹幕textView控件与弹幕的唯一标识符之间的对应关系,所述弹幕的唯一标识符是一个String类型的数据;
当弹幕准备进入屏幕执行移动动画的时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符;
将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到所述管理队列中;
当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出所述管理队列;
获取用户的弹幕显示设置指令,所述指令中包括弹幕显示区域高度设置信息;
根据所述指令从所述管理队列中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件;
设定所述目标textView控件在屏幕水平移动距离Sx,所述Sx小于屏幕宽度;
将弹幕的水平移动速度标记为Vx,通过Sx/Vx计算弹幕平滑变化的时间dT;
根据所述弹幕显示区域高度设置信息,计算在dT时间内运动的垂直距离和垂直速度Vy;
获取所述目标textView控件预设的水平动画;
根据dT和Vy为所述目标textView控件构建一个垂直动画;
定义一个组合动画,并将所述水平动画和所述垂直动画添加到组合动画的对象中;
通过调用组合动画开启水平动画和垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。
2.根据权利要求1所述的方法,其特征在于,所述获取当前屏幕显示的textView控件对应的弹幕的唯一标识符,包括:
通过调用textView.hashCode()获取当前屏幕显示的textView控件对应的弹幕的唯一标识符。
3.根据权利要求2所述的方法,其特征在于,所述管理队列为danmuShowQueue队列,所述将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到所述管理队列中,包括:
调用danmuShowQueue队列中的danmuShowQueue.add(tvHashCode)将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到danmuShowQueue队列中。
4.根据权利要求3所述的方法,其特征在于,所述当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出所述管理队列包括:
当当前屏幕显示的textView控件移出屏幕时,通过调用danmuShowQueue.poll()将当前屏幕显示的textView控件对应的弹幕的唯一标识符从danmuShowQueue队列中移除出去。
5.根据权利要求4所述的方法,其特征在于,所述根据dT和Vy为所述目标textView控件构建一个垂直动画,包括:
定义一个ObjectAnimator类型的mAnimatorTranslateY对象;
调用ObjectAnimator.ofFloat(textView,"translationY",tvHeight,tvHeight’)构建运动速度为Vy的垂直动画,其中,该ObjectAnimator.ofFloat函数是对目标textView控件执行垂直动画,该垂直动画的起始点是tvHeight,目标结束点是tvHeight’,返回值的是mAnimatorTranslateY对象信息;
调用mAnimatorTranslateY对象中的mAnimatorTranslateY.setDuration(dT)将垂直动画的执行周期dT设置到对象mAnimatorTranslateY中。
6.一种弹幕显示装置,其特征在于,所述装置包括:
构建单元,用于构建一个显示弹幕的管理队列,所述管理队列用于维护当前正屏幕中间显示的弹幕信息;
建立单元,用于建立弹幕textView控件与弹幕的唯一标识符之间的对应关系,所述弹幕的唯一标识符是一个String类型的数据;
队列管理单元,用于当弹幕准备进入屏幕执行移动动画的时,获取当前屏幕显示的textView控件对应的弹幕的唯一标识符;将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到所述管理队列中;当当前屏幕显示的textView控件移出屏幕时,将当前屏幕显示的textView控件对应的弹幕的唯一标识符移出所述管理队列;
获取单元,用于获取用户的弹幕显示设置指令,所述指令中包括弹幕显示区域高度设置信息;
查找单元,用于根据所述指令从所述管理队列中取出所有的当前正在显示的弹幕textView控件对应的目标唯一标识符,并通过目标唯一标识符找到对应的目标textView控件;
计算单元,用于设定所述目标textView控件在屏幕水平移动距离Sx,所述Sx小于屏幕宽度;将弹幕的水平移动速度标记为Vx,通过Sx/Vx计算弹幕平滑变化的时间dT;根据所述弹幕显示区域高度设置信息,计算在dT时间内运动的垂直距离和垂直速度Vy;
动画处理单元,用于获取所述目标textView控件预设的水平动画;根据dT和Vy为所述目标textView控件构建一个垂直动画;定义一个组合动画,并将所述水平动画和所述垂直动画添加到组合动画的对象中;
显示单元,用于通过调用组合动画开启水平动画和垂直动画的执行,在视频中实现基于所述目标textView控件的弹幕显示。
7.根据权利要求6所述的装置,其特征在于,所述队列管理单元具体用于:
通过调用textView.hashCode()获取当前屏幕显示的textView控件对应的弹幕的唯一标识符。
8.根据权利要求7所述的装置,其特征在于,所述管理队列为danmuShowQueue队列,所述队列管理单元具体还用于:
调用danmuShowQueue队列中的danmuShowQueue.add(tvHashCode)将当前屏幕显示的textView控件对应的弹幕的唯一标识符存储到danmuShowQueue队列中;
当当前屏幕显示的textView控件移出屏幕时,通过调用danmuShowQueue.poll()将当前屏幕显示的textView控件对应的弹幕的唯一标识符从danmuShowQueue队列中移除出去。
9.根据权利要求8所述的装置,其特征在于,所述动画处理单元具体用于:
定义一个ObjectAnimator类型的mAnimatorTranslateY对象;
调用ObjectAnimator.ofFloat(textView,"translationY",tvHeight,tvHeight’)构建运动速度为Vy的垂直动画,其中,该ObjectAnimator.ofFloat函数是对目标textView控件执行垂直动画,该垂直动画的起始点是tvHeight,目标结束点是tvHeight’,返回值的是mAnimatorTranslateY对象信息;
调用mAnimatorTranslateY对象中的mAnimatorTranslateY.setDuration(dT)将垂直动画的执行周期dT设置到对象mAnimatorTranslateY中。
10.一种电子设备,其特征在于,包括:存储器,处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时可以实现权利要求1至5任一所述的方法。
CN201811029870.6A 2018-09-05 2018-09-05 一种弹幕显示方法、装置及电子设备 Active CN110891190B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811029870.6A CN110891190B (zh) 2018-09-05 2018-09-05 一种弹幕显示方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811029870.6A CN110891190B (zh) 2018-09-05 2018-09-05 一种弹幕显示方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN110891190A true CN110891190A (zh) 2020-03-17
CN110891190B CN110891190B (zh) 2022-02-18

Family

ID=69744262

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811029870.6A Active CN110891190B (zh) 2018-09-05 2018-09-05 一种弹幕显示方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN110891190B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113365155A (zh) * 2021-04-26 2021-09-07 北京房江湖科技有限公司 弹幕管理方法及装置、设备及介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105872679A (zh) * 2015-12-31 2016-08-17 乐视网信息技术(北京)股份有限公司 弹幕显示方法和装置
US20170171601A1 (en) * 2015-12-11 2017-06-15 Le Holdings (Beijing) Co., Ltd. Bullet screen loading method and electronic device
CN107734373A (zh) * 2017-10-12 2018-02-23 网易(杭州)网络有限公司 弹幕发送方法及装置、存储介质、电子设备
US20180191987A1 (en) * 2017-01-04 2018-07-05 International Business Machines Corporation Barrage message processing

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170171601A1 (en) * 2015-12-11 2017-06-15 Le Holdings (Beijing) Co., Ltd. Bullet screen loading method and electronic device
CN105872679A (zh) * 2015-12-31 2016-08-17 乐视网信息技术(北京)股份有限公司 弹幕显示方法和装置
US20180191987A1 (en) * 2017-01-04 2018-07-05 International Business Machines Corporation Barrage message processing
CN107734373A (zh) * 2017-10-12 2018-02-23 网易(杭州)网络有限公司 弹幕发送方法及装置、存储介质、电子设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113365155A (zh) * 2021-04-26 2021-09-07 北京房江湖科技有限公司 弹幕管理方法及装置、设备及介质

Also Published As

Publication number Publication date
CN110891190B (zh) 2022-02-18

Similar Documents

Publication Publication Date Title
CN109117237B (zh) 一种弹幕显示方法、装置及电子设备
CN107341018B (zh) 一种在页面切换后继续显示视图的方法和装置
CN106021421B (zh) 一种加速网页渲染的方法及装置
CN112181342B (zh) 显示方法、装置、电子设备以及存储介质
US10546038B2 (en) Intelligent browser-based display tiling
US20190230311A1 (en) Video interface display method and apparatus
CN108337547B (zh) 一种文字动画实现方法、装置、终端和存储介质
US20140189516A1 (en) Video preview display method and terminal device
CN107204044B (zh) 一种基于虚拟现实的画面显示方法及相关设备
CN105677265A (zh) 一种显示方法及终端
CN106658139B (zh) 一种焦点控制方法及装置
CN110825997B (zh) 信息流页面的显示方法、装置、终端设备及系统
CN108905203B (zh) 信息处理方法、装置、存储介质及电子装置
CN112836086B (zh) 一种视频处理方法、装置和电子设备
CN112748843B (zh) 页面切换方法、装置、计算机设备和存储介质
US9754391B2 (en) Webpage display method and apparatus
CN109388737B (zh) 一种内容项的曝光数据的发送方法、装置及存储介质
JP2023548708A (ja) 画面表示方法、装置、端末機器及びコンピュータプログラム
CN107122104B (zh) 数据显示方法及装置
CN110891190B (zh) 一种弹幕显示方法、装置及电子设备
CN109361961B (zh) 一种弹幕显示方法、装置及电子设备
CN111796825B (zh) 一种弹幕的绘制方法、装置、设备和存储介质
CN110881138B (zh) 一种弹幕显示方法、装置及电子设备
CN110881145B (zh) 一种弹幕显示方法、装置及电子设备
CN109800039B (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