本發(fā)明涉及走馬燈效果實(shí)現(xiàn)技術(shù)領(lǐng)域,尤其涉及基于Android平臺(tái)的走馬燈效果實(shí)現(xiàn)裝置以及方法。
背景技術(shù):
在過去的幾年時(shí)間,Android平臺(tái)得到了快速的發(fā)展。Android平臺(tái)越來越穩(wěn)定,安全漏洞也逐漸被谷歌公司修復(fù),已逐漸趨于成熟。因此,很多平臺(tái)開始往Android平臺(tái)進(jìn)行移植,這就使得原有平臺(tái)已有的軟件也需要在Android平臺(tái)重新實(shí)現(xiàn)。但是,Android平臺(tái)并不是絕對(duì)完美的,硬件處理性能較差是它比起其它平臺(tái)一個(gè)較為明顯的缺點(diǎn)。因?yàn)檫@個(gè)缺點(diǎn),就決定了Android平臺(tái)處理大數(shù)據(jù)運(yùn)算、圖片處理和顯示等存在較大的局限。一直以來,Android平臺(tái)走馬燈效果難以得到較完美的實(shí)現(xiàn),就是由于這一局限所導(dǎo)致。
現(xiàn)有技術(shù)中有提出使用谷歌公司提供的TextView控件(Android平臺(tái)用于顯示文字的視圖控件)的ellipsize屬性(Android平臺(tái)TextView控件實(shí)現(xiàn)走馬燈效果的屬性)來實(shí)現(xiàn)走馬燈效果;該技術(shù)方案的實(shí)現(xiàn)原理是:如果TextView設(shè)置了ellipsize屬性,那么在TextView被初始化時(shí)就會(huì)通過AttributeSet(谷歌公司實(shí)現(xiàn)的屬性集合類)進(jìn)行解析,一旦解析到ellipsize的值合法,那么就將TextView上能夠顯示的文字?jǐn)?shù)量進(jìn)行擴(kuò)大,使其長(zhǎng)度大于TextView視圖本身的寬度,然后通過Canvas(Android平臺(tái)用于繪制的畫布)重復(fù)繪制,在每次繪制時(shí),重新計(jì)算開始繪制點(diǎn)的坐標(biāo),這樣就達(dá)到了滾動(dòng)的效果。與其他使用Canvas繪制走馬燈效果不同的是,該技術(shù)方案不需要開發(fā)者自己進(jìn)行實(shí)現(xiàn),而是由谷歌公司提供,開發(fā)者只是簡(jiǎn)單的設(shè)置一個(gè)ellipsize屬性即可。然而,此種技術(shù)方案實(shí)現(xiàn)的走馬燈效果較差,在運(yùn)行過程中抖動(dòng)、卡頓效果較明顯。
此外,現(xiàn)有技術(shù)中也有提出通過Canvas將需要顯示的內(nèi)容進(jìn)行動(dòng)態(tài)的繪制,以產(chǎn)生走馬燈的效果;而實(shí)現(xiàn)的辦法或者是均分時(shí)間繪制或者是均分位移進(jìn)行繪制。然而,此種方案同樣存在走馬燈效果較差,在運(yùn)行過程中抖動(dòng)、卡頓效果較明顯等問題。
技術(shù)實(shí)現(xiàn)要素:
因此,為克服現(xiàn)有技術(shù)中的缺陷和不足,本發(fā)明提出一種基于Android平臺(tái)的走馬燈效果實(shí)現(xiàn)裝置以及方法。
具體地,本發(fā)明實(shí)施例提出的一種基于Android平臺(tái)的走馬燈效果實(shí)現(xiàn)裝置包括:數(shù)據(jù)集模塊、適配器、數(shù)據(jù)處理模塊、平滑滾動(dòng)模塊、RecyclerView控件,且RecyclerView控件配置有布局管理器。其中,數(shù)據(jù)處理模塊用于循環(huán)查找子視圖并往內(nèi)存塊依序繪制查找的子視圖;適配器用于將數(shù)據(jù)集模塊中的數(shù)據(jù)與數(shù)據(jù)處理模塊查找的子視圖進(jìn)行綁定;平滑滾動(dòng)模塊用于在數(shù)據(jù)處理模塊往內(nèi)存塊繪制查找的子視圖時(shí)計(jì)算子視圖基于像素點(diǎn)移動(dòng)的速度以及預(yù)設(shè)時(shí)間長(zhǎng)度移動(dòng)的位移以控制繪制查找的子視圖時(shí)的圖像幀繪制速度;RecyclerView控件用于滾動(dòng)顯示數(shù)據(jù)處理模塊繪制的子視圖;以及布局管理器用于設(shè)置子視圖滾動(dòng)方向。
在本發(fā)明的一個(gè)實(shí)施例中,所述控制繪制查找的子視圖時(shí)的圖像幀繪制速度包括:當(dāng)子視圖基于像素點(diǎn)移動(dòng)的速度快時(shí),減慢圖像幀繪制速度;以及當(dāng)子視圖基于像素點(diǎn)移動(dòng)的速度慢時(shí),加快圖像幀繪制速度。
在本發(fā)明的一個(gè)實(shí)施例中,所述數(shù)據(jù)處理模塊往內(nèi)存塊依序繪制查找的子視圖是通過Canvas控件實(shí)現(xiàn)。
在本發(fā)明的一個(gè)實(shí)施例中,所述子視圖滾動(dòng)方向選自于向上滾動(dòng)、向下滾動(dòng)、向左滾動(dòng)和向右滾動(dòng)之一。
在本發(fā)明的一個(gè)實(shí)施例中,所述基于Android平臺(tái)的走馬燈效果實(shí)現(xiàn)裝置應(yīng)用于LED顯示屏系統(tǒng)。
此外,本發(fā)明實(shí)施例提出的一種基于Android平臺(tái)的走馬燈效果實(shí)現(xiàn)方法,包括步驟:(i)循環(huán)查找RecyclerView控件需要顯示的多個(gè)子視圖并往內(nèi)存塊依序繪制查找的子視圖;(ii)在往內(nèi)存塊繪制查找的子視圖時(shí),計(jì)算子視圖基于像素點(diǎn)移動(dòng)的速度以及預(yù)設(shè)時(shí)間長(zhǎng)度移動(dòng)的位移以控制繪制查找的子視圖時(shí)的圖像幀繪制速度;以及(iii)利用所述RecyclerView控件往預(yù)設(shè)方向滾動(dòng)顯示繪制的子視圖。
在本發(fā)明的一個(gè)實(shí)施例中,在步驟(i)中,往內(nèi)存塊依序繪制查找的子視圖是通過Canvas控件實(shí)現(xiàn)。
在本發(fā)明的一個(gè)實(shí)施例中,在步驟(ii)中,控制繪制查找的子視圖時(shí)的圖像幀繪制速度包括:當(dāng)子視圖基于像素點(diǎn)移動(dòng)的速度快時(shí),減慢圖像幀繪制速度;以及當(dāng)子視圖基于像素點(diǎn)移動(dòng)的速度慢時(shí),加快圖像幀繪制速度。
在本發(fā)明的一個(gè)實(shí)施例中,在步驟(iii)中,往預(yù)設(shè)方向滾動(dòng)顯示為向上滾動(dòng)顯示、向下滾動(dòng)顯示、向左滾動(dòng)顯示或向右滾動(dòng)顯示。
在本發(fā)明的一個(gè)實(shí)施例中,所述基于Android平臺(tái)的走馬燈效果實(shí)現(xiàn)方法還包括步驟:利用相關(guān)于RecyclerView控件的布局管理器的Direction屬性設(shè)置所述預(yù)設(shè)方向。
由上可知,本發(fā)明實(shí)施例通過設(shè)置數(shù)據(jù)處理模塊及平滑滾動(dòng)模塊,能夠在Android平臺(tái)上利用RecyclerView控件實(shí)現(xiàn)走馬燈效果且能夠使得Android平臺(tái)走馬燈抖動(dòng)效果及卡頓效果得到明顯改善;此外,通過配置布局管理器來設(shè)置子視圖滾動(dòng)方向,可以實(shí)現(xiàn)多個(gè)方向例如上、下、左、右四個(gè)方向的走馬燈效果。
通過以下參考附圖的詳細(xì)說明,本發(fā)明的其它方面和特征變得明顯。但是應(yīng)當(dāng)知道,該附圖僅僅為解釋的目的設(shè)計(jì),而不是作為本發(fā)明的范圍的限定。還應(yīng)當(dāng)知道,除非另外指出,不必要依比例繪制附圖,它們僅僅力圖概念地說明此處描述的結(jié)構(gòu)和流程。
附圖說明
下面將結(jié)合附圖,對(duì)本發(fā)明的具體實(shí)施方式進(jìn)行詳細(xì)的說明。
圖1為相關(guān)技術(shù)方案中利用RecyclerView控件實(shí)現(xiàn)靜態(tài)畫面顯示的總體模塊圖。
圖2為本發(fā)明實(shí)施例的一種基于Android平臺(tái)的走馬燈效果實(shí)現(xiàn)裝置的模塊示意圖。
具體實(shí)施方式
為使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式做詳細(xì)的說明。
具體地,參見圖1,其為相關(guān)技術(shù)方案中利用RecyclerView控件實(shí)現(xiàn)靜態(tài)畫面顯示的總體模塊圖。如圖1所示,其主要分為三大部分:數(shù)據(jù)集(DataSet)模塊11、適配器(Adapter)13和RecyclerView(可重用視圖)控件15。其中,RecyclerView控件15為一種容器控件;適配器13主要用來將數(shù)據(jù)集模塊11中的數(shù)據(jù)和RecyclerView控件15顯示的子視圖進(jìn)行綁定,其一方面可以用來監(jiān)視數(shù)據(jù)集模塊15中的數(shù)據(jù)變化,另一方面可以用來當(dāng)數(shù)據(jù)集模塊11中的數(shù)據(jù)有變化時(shí)通知RecyclerView控件15。然而,在圖1所示總體模塊圖中,RecyclerView控件15通過適配器13與數(shù)據(jù)集模塊11進(jìn)行關(guān)聯(lián)顯示畫面時(shí)的畫面內(nèi)容是靜態(tài)的,并無走馬燈效果。
因此為了實(shí)現(xiàn)走馬燈效果,本發(fā)明下述實(shí)施例將結(jié)合圖2詳細(xì)描述一種基于Android平臺(tái)的走馬燈效果實(shí)現(xiàn)技術(shù)方案。
參見圖2,為實(shí)現(xiàn)本地或者網(wǎng)絡(luò)數(shù)據(jù)的走馬燈效果,本實(shí)施例在圖1的基礎(chǔ)上增設(shè)了數(shù)據(jù)處理模塊24a和平滑滾動(dòng)模塊24b并且為RecyclerView控件15配置了布局管理器(LayoutManager)151,使得用戶界面顯示內(nèi)容能夠在指定方向上平滑滾動(dòng)起來。
數(shù)據(jù)處理模塊24a用于實(shí)現(xiàn)循環(huán)查找子視圖的功能,其工作原理如下:如果RecyclerView控件15有多個(gè)例如n個(gè)子視圖需要顯示,當(dāng)前呈現(xiàn)給用戶的子視圖為第m個(gè)子視圖,那么此時(shí)它對(duì)應(yīng)的子視圖數(shù)據(jù)在內(nèi)存塊P中,如果要查找第n個(gè)子視圖,就需要將第m+1個(gè)子視圖通過Canvas(畫布)繪制到內(nèi)存塊P中,然后依次是第m+2個(gè)、第m+3個(gè)、第m+4個(gè)、…、.第n個(gè)子視圖;繪制到第n個(gè)子視圖時(shí),RecyclerView控件15便知道這是它最終查找的子視圖,因此不再繼續(xù)往下查找;如果需要循環(huán)查找,方法與上述提到的類似,只是找到最后一個(gè)子視圖后,又往內(nèi)存塊P繪制第1個(gè)子視圖;至于各個(gè)子視圖的顯示內(nèi)容數(shù)據(jù),則是通知適配器13從數(shù)據(jù)集模塊11獲取,而數(shù)據(jù)集模塊11作為需要顯示走馬燈效果的數(shù)據(jù)源。
平滑滾動(dòng)模塊24b用于實(shí)現(xiàn)子視圖平滑滾動(dòng)的功能,其工作原理如下:主要使用的技術(shù)手段有二,其一是在數(shù)據(jù)處理模塊24a每次查找子視圖時(shí)計(jì)算單位時(shí)間(例如每秒)需要移動(dòng)多少個(gè)像素,其二是計(jì)算預(yù)設(shè)時(shí)間長(zhǎng)度(例如一秒)移動(dòng)的位移值。在前述循環(huán)查找中提到,每次查找實(shí)際上就是往內(nèi)存塊P通過Canvas繪圖的過程,那么就需要計(jì)算,對(duì)于同一個(gè)子視圖,Android系統(tǒng)每一幀每次繪制時(shí)的起始坐標(biāo)是多少,每幀應(yīng)該往某個(gè)方向移動(dòng)多少個(gè)像素進(jìn)行繪制,這樣每秒移動(dòng)多少個(gè)像素就能夠計(jì)算出來,而計(jì)算出的每秒移動(dòng)的像素值實(shí)際上就是RecyclerView控件15顯示的子視圖基于像素點(diǎn)移動(dòng)的速度。動(dòng)態(tài)計(jì)算和動(dòng)態(tài)繪制導(dǎo)致的最終結(jié)果便是RecyclerView控件15的顯示內(nèi)容移動(dòng)。但是,為什么本實(shí)施例又提出使用“預(yù)設(shè)時(shí)間長(zhǎng)度移動(dòng)的位移值”呢?原因是:如果只是簡(jiǎn)單的根據(jù)起始坐標(biāo)進(jìn)行繪制和移動(dòng),由于CPU每秒繪制的幀不一致,加上頻繁的邏輯運(yùn)算和圖像繪制會(huì)導(dǎo)致CPU性能有所下降,那么每秒繪制的幀數(shù)量會(huì)差別較大,從而產(chǎn)生明顯的丟幀和卡幀,造成抖動(dòng)和卡頓現(xiàn)象。計(jì)算位移值的好處是:如果計(jì)算的每秒需要移動(dòng)的像素值不一致,即速度不一致,只要能夠保證位移大致相等,那么單位時(shí)間繪制的圖像在視覺效果上便不會(huì)出現(xiàn)較大反差,移動(dòng)的像素值大即速度快的少繪制幾幀圖像(對(duì)應(yīng)減慢圖像幀繪制速度),移動(dòng)的像素值小即速度慢的多繪制幾幀圖像(對(duì)應(yīng)加快圖像幀繪制速度),這樣就達(dá)到了“較平滑滾動(dòng)”的效果。
此外,布局管理器151用于通過其內(nèi)部封裝的Direction屬性對(duì)RecyclerView控件15的子視圖滾動(dòng)方向進(jìn)行控制;比如Direction屬性被設(shè)置為Up,那么RecyclerView控件15的子視圖在平滑滾動(dòng)的過程中,就會(huì)不斷地在垂直方向計(jì)算每次應(yīng)該往上移動(dòng)多少個(gè)像素和位移進(jìn)行繪制,其它方向的實(shí)現(xiàn)與此類似,因而可以實(shí)現(xiàn)上、下、左、右四個(gè)方向的走馬燈效果。
對(duì)于前述圖2所示的數(shù)據(jù)集模塊11、適配器13、數(shù)據(jù)處理模塊24a、平滑滾動(dòng)模塊24b和配置有布局管理器151的RecyclerView控件15,簡(jiǎn)而言之,數(shù)據(jù)處理模塊24a用于循環(huán)查找子視圖并利用例如Canvas控件往內(nèi)存塊依序繪制查找的子視圖,適配器13用于將數(shù)據(jù)集模塊11中的數(shù)據(jù)與數(shù)據(jù)處理模塊24a查找的子視圖進(jìn)行綁定,平滑滾動(dòng)模塊24b用于在數(shù)據(jù)處理模塊24a利用Canvas控件內(nèi)存塊繪制子視圖時(shí)計(jì)算子視圖基于像素點(diǎn)移動(dòng)的速度以及預(yù)設(shè)時(shí)間長(zhǎng)度移動(dòng)的位移來控制繪制查找的子視圖時(shí)的圖像幀繪制速度從而實(shí)現(xiàn)子視圖的平滑滾動(dòng),RecyclerView控件15用于滾動(dòng)顯示數(shù)據(jù)處理模塊24a繪制的子視圖,以及布局管理器151用于設(shè)置子視圖滾動(dòng)方向。而且,值得一提的是,各個(gè)功能模塊例如是由軟件實(shí)現(xiàn)。
綜上所述,本發(fā)明實(shí)施例通過設(shè)置數(shù)據(jù)處理模塊24a及平滑滾動(dòng)模塊24b,能夠在Android平臺(tái)上利用RecyclerView控件實(shí)現(xiàn)走馬燈效果且能夠使得Android平臺(tái)走馬燈抖動(dòng)效果及卡頓效果得到明顯改善;此外,通過配置布局管理器151來設(shè)置子視圖滾動(dòng)方向,可以實(shí)現(xiàn)多個(gè)方向例如上、下、左、右四個(gè)方向的走馬燈效果。另外,RecyclerView控件15本身具有實(shí)現(xiàn)子視圖可重用/可回收的特性,每一個(gè)可重用的子視圖對(duì)應(yīng)RAM上的一個(gè)數(shù)據(jù)緩沖區(qū),因此即使數(shù)據(jù)集模塊11中的數(shù)據(jù)比較龐大,只是復(fù)用這些已有的緩沖區(qū),而不需要另辟內(nèi)存空間,從而不會(huì)占用較大內(nèi)存,不會(huì)影響大數(shù)據(jù)運(yùn)算處理。
最后,值得一提的是,本發(fā)明前述實(shí)施例的走馬燈效果實(shí)現(xiàn)技術(shù)方案不局限于手機(jī)、平板電腦和LED顯示屏系統(tǒng)等領(lǐng)域,也可以是電視及其它應(yīng)用走馬燈效果的行業(yè)和領(lǐng)域。
上所述,僅是本發(fā)明的較佳實(shí)施例而已,并非對(duì)本發(fā)明作任何形式上的限制,雖然本發(fā)明已以較佳實(shí)施例揭露如上,然而并非用以限定本發(fā)明,任何熟悉本專業(yè)的技術(shù)人員,在不脫離本發(fā)明技術(shù)方案范圍內(nèi),當(dāng)可利用上述揭示的技術(shù)內(nèi)容作出些許更動(dòng)或修飾為等同變化的等效實(shí)施例,但凡是未脫離本發(fā)明技術(shù)方案內(nèi)容,依據(jù)本發(fā)明的技術(shù)實(shí)質(zhì)對(duì)以上實(shí)施例所作的任何簡(jiǎn)單修改、等同變化與修飾,均仍屬于本發(fā)明技術(shù)方案的范圍內(nèi)。