可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法、裝置和終端的制作方法
【專利摘要】一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法、裝置和終端。其中所述方法包括:為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器;生成畫面對應的內(nèi)容并添加到所述的畫面容器中,所述的內(nèi)容即為UI浮窗視圖;獲取系統(tǒng)當前棧頂應用對應的方位屬性以及系統(tǒng)重力感應檢測的方位,若發(fā)生變化,進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣;對所述的用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠投遞到對應的浮窗內(nèi)部的UI組件上。本發(fā)明的技術方案具有計算量較小、處理效率更高、浮窗UI組件外觀更自然的有益效果。
【專利說明】可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法、裝置和終端
【技術領域】
[0001]本發(fā)明涉及浮窗顯示【技術領域】,尤其涉及可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法、裝置以及終端。
【背景技術】
[0002]隨著智能終端技術的突飛猛進及智能終端的業(yè)務迅猛發(fā)展,利用浮窗實現(xiàn)與用戶的交互也越來越多樣化。浮窗是用于彈出、可移動的獨立窗口,frame、div等類似實現(xiàn)提示、通告等功能,通稱為“浮動窗口 ”。在日常生活中,通過智能手機,平板電腦等終端我們可進行“浮窗預覽”功能體驗,從使用感受上來說,這項功能可以為我們提供非常高效的操作方式,讓我們的終端更具人性化,加強了用戶使用上的便利性。
[0003]Android平臺上的應用程序,除了常見的在應用程序內(nèi)與用戶進行交互(即App的Activity)之外,通常希望在用戶離開程序界面之后,還可以提供一些額外的交互,這可以通過浮窗Π (USER INTERFACE,即用戶界面)進行實現(xiàn)。為了提供直觀而且自然的浮窗Π交互體驗,浮窗本身必須跟隨屏幕旋轉(zhuǎn)進行同步的旋轉(zhuǎn)。
[0004]現(xiàn)有的Android平臺上的所有UI組件并不支持旋轉(zhuǎn)特性,要實現(xiàn)旋轉(zhuǎn)特性,現(xiàn)有技術實現(xiàn)方式有:
[0005]實現(xiàn)方式一:修改Android的所有UI組件,使其支持跟隨屏幕旋轉(zhuǎn)而能夠自適應旋轉(zhuǎn),除了修改Android所有UI組件,同時還必須修改Android的UI架構,工作量巨大,而且技術風險很大。
[0006]實現(xiàn)方式二:為同一浮窗內(nèi)的整個View準備多套候選的View,根據(jù)屏幕的旋轉(zhuǎn)情況選擇其中一個候選的View進行顯示,該方案雖然能夠避免大規(guī)模修改Android UI框架,但是操作冗余,運行效率低下。
[0007]實現(xiàn)方式三:借助Android已有的View旋轉(zhuǎn)動畫,在檢測到屏幕旋轉(zhuǎn)時,對View進行同步旋轉(zhuǎn),并且在旋轉(zhuǎn)結(jié)束后定格在動畫結(jié)束狀態(tài)處,該方案要求所有的浮窗UI整個View (遞歸的包括所有的子View)都必須要進行動畫顯示,效率低下,而且控制冗余。
【發(fā)明內(nèi)容】
[0008]本發(fā)明實施例提供可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法、裝置和終端,其實現(xiàn)浮窗Π組件旋轉(zhuǎn)效率較高,工作量較小,而且技術風險不大。
[0009]本發(fā)明實施例采用以下技術方案:
[0010]第一方面,本發(fā)明實施例提供一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法,包括:
[0011]為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器;
[0012]生成畫面對應的內(nèi)容并添加到所述畫面容器中,所述的內(nèi)容即為UI浮窗視圖;
[0013]獲取系統(tǒng)當前棧頂應用對應的方位屬性以及系統(tǒng)重力感應檢測的方位,當系統(tǒng)當前棧頂應用對應的方位或者/以及系統(tǒng)重力感應檢測的方位發(fā)生變化時,進行旋轉(zhuǎn)補償,重新繪制所述的UI浮窗,獲得旋轉(zhuǎn)逆矩陣;
[0014]對用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠準確投遞到對應的浮窗內(nèi)部Π組件上。
[0015]第二方面,本發(fā)明實施例提供一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置,包括:
[0016]畫面容器提供單元,用于為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器;
[0017]畫面內(nèi)容生成單元,用于生成畫面對應的內(nèi)容并添加到所述畫面容器中,所述的內(nèi)容即為Π浮窗視圖;
[0018]方位獲取單元:用于獲取系統(tǒng)當前棧頂應用對應的方位屬性以及系統(tǒng)重力感應檢測的方位,當系統(tǒng)當前棧頂應用對應的方位或者/以及系統(tǒng)重力感應檢測的方位發(fā)生變化時,進行旋轉(zhuǎn)補償,重新繪制所述的UI浮窗,獲得旋轉(zhuǎn)逆矩陣;
[0019]坐標旋轉(zhuǎn)逆變換單元,用于對用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠準確投遞到對應的浮窗內(nèi)部Π組件上。
[0020]第三方面,本發(fā)明實施例提供一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的終端,所述的終端包括如上述的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置。
[0021]實施本技術方案的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法、裝置和終端,有益效果在于:
[0022]區(qū)別于現(xiàn)有技術中的浮窗Π組件實現(xiàn)旋轉(zhuǎn)的功能,需要修改大量的Π組件,或需要準備多套畫面候選,或需要動畫顯示,本技術方案通過重繪浮窗以及坐標的旋轉(zhuǎn)逆變換等“假象”生成的浮窗Π組件看起來像沒發(fā)生旋轉(zhuǎn)一樣,計算量較小,效率更高,浮窗Π組件外觀更自然。
【專利附圖】
【附圖說明】
[0023]為了更清楚地說明本發(fā)明實施例中的技術方案,下面將對本發(fā)明實施例描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)本發(fā)明實施例的內(nèi)容和這些附圖獲得其他的附圖。
[0024]圖1是本發(fā)明實施例一提供的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)方法流程圖。
[0025]圖2是本發(fā)明實施例二提供的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)方法流程圖。
[0026]圖3是本發(fā)明實施例三提供的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)方法流程圖。
[0027]圖4是本發(fā)明實施例一提供的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)裝置的功能方框圖。
[0028]圖5是本發(fā)明實施例二提供的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)裝置的功能方框圖。
[0029]圖6是本發(fā)明實施例三提供的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)裝置的功能方框圖。
[0030]圖7是本發(fā)明實施例一提供的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)終端的功能方框圖。
[0031]圖8是本發(fā)明實施例二提供的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)終端的功能方框圖。
[0032]圖9是本發(fā)明實施例三提供的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)終端的功能方框圖。
【具體實施方式】
[0033]為使本發(fā)明解決的技術問題、采用的技術方案和達到的技術效果更加清楚,下面將結(jié)合附圖對本發(fā)明實施例的技術方案作進一步的詳細描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0034]本實施例的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)方法主要應用于各種具有觸摸屏的智能終端,包括智能手機、電子書閱讀器、MP3 (Moving Picture Experts Group Aud1Layer III,動態(tài)影像專家壓縮標準音頻層面3)播放器、MP4 (Moving Picture ExpertsGroup Aud1 Layer IV,動態(tài)影像專家壓縮標準音頻層面4)播放器、筆記本電腦、平板電腦等。該觸摸屏包括電阻式觸摸屏和電容式觸摸屏。
[0035]總的來說,本技術提供一種通用且高效率的可跟隨屏幕自動旋轉(zhuǎn)的浮窗Π技術方案。首先提供一個支持旋轉(zhuǎn)屬性的ViewGroup,并用該ViewGroup作為待顯示的UI浮窗的內(nèi)容View的容器。通過inf later的inflate O方法生成對應的內(nèi)容View并添加到上述的ViewGroup中。獲取當前的Activity對應的Orientat1n并監(jiān)聽Activity棧頂以便跟隨Activity對應的Orientat1n的變化;獲取當前重力傳感器的Orientat1n并注冊重力傳感器監(jiān)聽器以便跟隨傳感器的方向。根據(jù)傳感器方向以及屏幕的Orientat1n進行旋轉(zhuǎn)補償,重新繪制浮窗,同時獲得旋轉(zhuǎn)逆矩陣。當用戶在浮窗區(qū)域內(nèi)進行點擊的時候,對點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠投遞到對應的浮窗內(nèi)部UI組件上。
[0036]請參考圖1,其是本發(fā)明方法的實施例一,一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)方法流程圖(以下以Android系統(tǒng)具體說明),包括:
[0037]SlOl、為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器;
[0038]首先提供一個支持旋轉(zhuǎn)屬性的ViewGroup (記為RotateLayout),并用該ViewGroup作為待顯示的UI浮窗的View的容器。
[0039]S102、生成畫面對應的內(nèi)容并添加到所述畫面容器中,所述的內(nèi)容即為UI浮窗視圖;
[0040]可通過inflater的inflate O方法生成對應的內(nèi)容View (記為內(nèi)容View:ContentView)并添加到上述的ViewGroup中。
[0041]根據(jù)Android的UI繪制原理,繪制的控制權會先交到RotateLayout,再由其傳遞給其內(nèi)部的子View。
[0042]S103、獲取系統(tǒng)當前棧頂應用對應的方位屬性以及系統(tǒng)重力感應檢測的方位,當系統(tǒng)當前棧頂應用對應的方位或者/以及系統(tǒng)重力感應檢測的方位發(fā)生變化時,進行旋轉(zhuǎn)補償,重新繪制所述的UI浮窗,獲得旋轉(zhuǎn)逆矩陣;
[0043]其中,系統(tǒng)為具有Android平臺的終端,方位的角度為90度的倍數(shù),Orientat1n包括四個值:正豎屏、反豎屏、正橫屏、反橫屏,約定對應的旋轉(zhuǎn)角度(逆時針)值為O度、180度、90度、270度。
[0044]S104、對所述的用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠投遞到對應的浮窗內(nèi)部UI組件上。
[0045]在RotateLayout 的相關方法中,如 onDraw O、dispatchDraw O、dispatchTouchEvent O、onLayout()、onMeasure()幾個方法中,可以先進行旋轉(zhuǎn)的補償,使得子View的繪制、事件投遞等變得跟沒旋轉(zhuǎn)一樣,從而實現(xiàn)旋轉(zhuǎn)的透明支持。
[0046]需要說明的是,對于不同的智能終端操作系統(tǒng)或不同的實現(xiàn)浮窗技術的編程語言,Π繪制原理的程序可能有所區(qū)別,對于本領域普通技術人員來說,其可根據(jù)不同操作系統(tǒng)或不同的編程語言實現(xiàn)畫面容器重繪浮窗UI組件以及旋轉(zhuǎn)逆轉(zhuǎn)換。
[0047]綜上,本發(fā)明實施例一的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法,通過重繪浮窗以及坐標的旋轉(zhuǎn)逆變換等“假象”生成的浮窗Π組件,不需要改動原有的浮窗Π組件,新繪的浮窗UI組件看起來像沒發(fā)生旋轉(zhuǎn)一樣,克服了現(xiàn)有技術中浮窗UI組件實現(xiàn)旋轉(zhuǎn)的功能,需要修改大量的Π組件,或需要準備多套畫面候選,或需要動畫顯示等等效率低下,計算復雜的不足,本技術方案具有計算量較小,效率更高,浮窗Π組件外觀更自然的有益效果O
[0048]請參考圖2,其是本發(fā)明方法的實施例二,一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)方法流程圖,步驟S201、S202、S208分別與實施例一中的S101、S102、S104相同,不同之處在于步驟 S203、S204、S205、S206、S207,該方法包括:
[0049]S201、為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器;
[0050]S202、生成畫面對應的內(nèi)容并添加到所述的畫面容器中,所述的內(nèi)容即為UI浮窗視圖;
[0051]S203、獲取系統(tǒng)當前棧頂應用對應的方位以及系統(tǒng)重力感應檢測的方位,記為第一時刻;同時注冊系統(tǒng)的重力傳感器監(jiān)聽器,啟動系統(tǒng)棧頂監(jiān)控程序,設置監(jiān)控的時間間隔值;
[0052]其中,設置監(jiān)控的時間間隔值可以為30秒至2分鐘,根據(jù)實際情況而定,在這段間隔時間內(nèi),有可能終端轉(zhuǎn)動后方位發(fā)生了改變,也有可能終端轉(zhuǎn)動后回到了原來的位置。通過預設的時間間隔可以更清楚用戶的動作,做出更節(jié)省內(nèi)存運算的操作。
[0053]S204、當系統(tǒng)重力傳感器發(fā)生方位變化的時候,會通告監(jiān)聽器,此時根據(jù)監(jiān)聽器重新計算新的系統(tǒng)重力感應檢測的方位值,記為第二時刻;
[0054]較佳地,該步驟包括:判斷系統(tǒng)重力傳感器發(fā)生方位是否變化,若發(fā)生了變化,進入S204a、通告監(jiān)聽器,此時根據(jù)監(jiān)聽器重新計算新的系統(tǒng)重力感應檢測的方位值,記為第二時刻;若沒有發(fā)生變化,進入S204b、丟棄獲取的方位數(shù)據(jù)。
[0055]S205、比較第一時刻獲取的方位以及第二時時刻獲取的方位,若發(fā)生變化,則進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣;
[0056]較佳地,該步驟包括:判斷第一時刻獲取的方位以及第二時時刻獲取的方位是否變化,若發(fā)生了變化,進入S205a、通告監(jiān)聽器,此時根據(jù)監(jiān)聽器重新計算新的系統(tǒng)重力感應檢測的方位值,記為第二時刻;若沒有發(fā)生變化,進入S205b、丟棄獲取的方位數(shù)據(jù)。
[0057]更進一步地,本實施例二中還具有以下的步驟:
[0058]S206、等待預設的時間間隔,再次獲取系統(tǒng)當前棧頂應用對應的方位值,記為第三時刻;
[0059]S207、比較第二時刻獲取的方位以及第三時時刻獲取的方位,若發(fā)生變化,則進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣。
[0060]較佳地,該步驟包括:判斷第二時刻獲取的方位以及第三時時刻獲取的方位是否發(fā)生變生,若發(fā)生變化,返回上述的步驟S205a,若沒有發(fā)生變化,丟棄當前獲取的方位數(shù)據(jù)。
[0061]S208、對所述的用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠準確投遞到對應的浮窗內(nèi)部Π組件上。
[0062]綜上,本實施例中,由于時間間隔的存在,如果終端檢測到第一時刻與第二時刻沒有發(fā)生方位變化,則有可能如下的步驟:丟棄第二時刻的數(shù)據(jù)或返回步驟S203等等,只有當檢測到發(fā)生方位的變化,才進行重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣之類的操作,本技術方案具有計算量更小,效率更高,浮窗UI組件外觀更自然的有益效果之外,更進一步節(jié)省了系統(tǒng)的資源,同時,更進一步減少了內(nèi)存數(shù)據(jù)的運算。
[0063]請參考圖3,其是本發(fā)明實施例三,一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)方法流程圖,與上述的實施例一大部分步驟相同,即:步驟S301、S302、S306分別與實施例一中的S101、S102、S104相同,不同之處在于步驟S303、S304、S305,該方法包括:
[0064]S301、為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器;
[0065]S302、生成畫面對應的內(nèi)容并添加到所述的畫面容器中,所述的內(nèi)容即為UI浮窗視圖;
[0066]S303、獲取當前的用戶點擊事件的活動對應的第一方位并監(jiān)聽所述的活動的棧頂,以便跟隨所述的活動的對應的方位進行變化。
[0067]通過獲取用戶點擊的方位并監(jiān)聽方位,可以更進一步明確用戶的動向。
[0068]S304、獲取當前的重力傳感器的第二方位并注冊所述的重力傳感器的監(jiān)聽器,以便跟隨所述的重力傳感器的方向進行變化。
[0069]通過獲取重力傳感器的方位并監(jiān)聽方位,可以更進一步明確終端發(fā)生轉(zhuǎn)換的動向。
[0070]S305、若發(fā)生變化,進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣;
[0071]S306、對所述的用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠投遞到對應的浮窗內(nèi)部UI組件上。
[0072]以Android平臺舉例說明,獲取當前的Activity對應的Orientat1n (記為ContextOrientat1n)并監(jiān)聽 Activity 棧頂以便跟隨 Activity 對應的 Orientat1n 的變化。
[0073]獲取當前重力傳感器的Orientat1n (記為SensorOrientat1n)并注冊重力傳感器監(jiān)聽器以便跟隨傳感器的方向。
[0074]綜上,本實施例中,通過跟隨所述的用戶點擊的活動以及重力傳感器的對應的方位的變化,從而作出重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣之類的操作,使浮窗Π組件實現(xiàn)更具體、更細致、更精確。本技術方案具有計算量較小,效率更高,浮窗Π組件外觀更自然的有益效果之外,更進一步實現(xiàn)了浮窗UI組件的及時性、靈活性以及應對性。
[0075]對于實施例一至三中的旋轉(zhuǎn)算法,更具體地說明如下:
[0076]Orientat1n包括四個值:正豎屏、反豎屏、正橫屏、反橫屏。約定對應的旋轉(zhuǎn)角度(逆時針)值為O度、180度、90度、270度。把上面的兩個Orientat1n依次轉(zhuǎn)化為角度值,分別記為:ContextDegree, SensorDegree0
[0077]根據(jù)公式,計算補償角度:
[0078]CompsateDegree=-ContextDegree+SensorDegree。
[0079]其中,獲取當前的Activity (用戶點擊事件)對應的Orientat1n (記為ContextOrientat1n)并監(jiān)聽 Activity 棧頂以便跟隨 Activity 對應的 Orientat1n 的變化。
[0080]獲取當前重力傳感器的Orientat1n (記為SensorOrientat1n)并注冊重力傳感器監(jiān)聽器以便跟隨傳感器的方向。
[0081]當發(fā)現(xiàn)重力傳感器的SensorOrientat1n或棧底的ContextOrientat1n發(fā)生變化時,則依據(jù)上述的補償公式進行相應的旋轉(zhuǎn)補償。根據(jù)Android的顯示原理,這可以通過把上述的角度更新到RotateLayout ViewGroup的一個屬性值中,并通過RotateLayout的requestLayoutO強制觸發(fā)Π的重新布局和繪制。整個重新布局和重新繪制過程主要如下:
[0082]UonMeasure ():若旋轉(zhuǎn)后的角度為90度/270度,貝U在measureChild O前進行寬高置換,否則不變。
[0083]2> onLayout ():通過當前的旋轉(zhuǎn)角度,利用Matrix.setRotate O計算旋轉(zhuǎn)補償矩陣,并對RotateLayout的顯示坐標(相當于外框)進行相應的旋轉(zhuǎn)。
[0084]3、onDraw O:對傳遞進來的Canvas進行旋轉(zhuǎn),使得RotateLayout的繪制本身體現(xiàn)出旋轉(zhuǎn)的結(jié)果。
[0085]4、dispatchDraw ():在分發(fā)Canvas給到子View之前,對該Canvas進行旋轉(zhuǎn)補償,補償?shù)姆椒礊楦鶕?jù)當前旋轉(zhuǎn)的角度alpha,對Canvas圍繞RotateLayout的中心點進行-alpha的旋轉(zhuǎn),這樣子View在繪制時將能夠體現(xiàn)出旋轉(zhuǎn)的特性。
[0086]上述的結(jié)果使得RotateLayout內(nèi)的子View不需要處理任何旋轉(zhuǎn)相關邏輯,因為所有的旋轉(zhuǎn)都被RotateLayout補償過了,子View看起來就像旋轉(zhuǎn)沒有發(fā)生過一樣。而這種假象僅僅建立在繪制的基礎之上。
[0087]當用戶在浮窗內(nèi)進行點擊的時候,和上述重布局和重繪邏輯一樣,此時也必須對點擊坐標進行旋轉(zhuǎn)補償,以便事件能夠投遞到真正的控件上。主要是:在RotateLayout的dispatchTouchEvent O中,通過前述的旋轉(zhuǎn)矩陣,對傳遞進來的Mot1nEvent的坐標值進行旋轉(zhuǎn)的預處理之后,通過super.dispatchTouchEvent (Mot1nEvent)再把事件投遞到對應的子View上。
[0088]以下為本發(fā)明實施例的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置,與可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法屬于同一構思,在可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置實施例中未詳盡描述的細節(jié)內(nèi)容,可以參考上述方法實施例。
[0089]請參考圖4,其是本發(fā)明實施例一,一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)裝置1,包括:
[0090]畫面容器提供單元100,用于為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器;
[0091]畫面內(nèi)容生成單元200,用于生成畫面對應的內(nèi)容并添加到所述的畫面容器中,所述的內(nèi)容即為Π浮窗視圖;
[0092]方位獲取單元300,用于獲取用戶點擊事件的活動的方位以及系統(tǒng)檢測的方位,若發(fā)生變化,進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣;
[0093]坐標旋轉(zhuǎn)逆變換單元400,用于對所述的用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠投遞到對應的浮窗內(nèi)部UI組件上。
[0094]其中,所述的系統(tǒng)為具有Android平臺的終端系統(tǒng),所述的方位的角度為90度的倍數(shù),所述生成畫面對應的內(nèi)容,包括:通過inflater的inflateO方法生成對應的內(nèi)容View并添加到所述的畫面容器中。
[0095]綜上,本發(fā)明實施例一的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置1,通過重繪浮窗以及坐標的旋轉(zhuǎn)逆變換等“假象”生成的浮窗Π組件,不需要改動原有的浮窗Π組件,新繪的浮窗UI組件看起來像沒發(fā)生旋轉(zhuǎn)一樣,克服了現(xiàn)有技術中浮窗UI組件實現(xiàn)旋轉(zhuǎn)的功能,需要修改大量的Π組件,或需要準備多套畫面候選,或需要動畫顯示等等效率低下,計算復雜的不足,本技術方案具有計算量較小,效率更高,浮窗Π組件外觀更自然的有益效果O
[0096]請參考圖5,其是本發(fā)明實施例二,一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)裝置2,包括第一實施例中的畫面容器提供單元100,畫面內(nèi)容生成單元200、坐標旋轉(zhuǎn)逆變換單元400,不同之處在于:方位獲取單元300,具體如下:
[0097]畫面容器提供單元100,用于為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器;
[0098]畫面內(nèi)容生成單元200,用于生成畫面對應的內(nèi)容并添加到所述的畫面容器中,所述的內(nèi)容即為Π浮窗視圖;
[0099]第一時刻記錄單元301,用于獲取系統(tǒng)當前棧頂應用對應的方位以及系統(tǒng)重力感應檢測的方位,記為第一時刻;同時注冊系統(tǒng)的重力傳感器監(jiān)聽器,啟動系統(tǒng)棧頂監(jiān)控程序,設置監(jiān)控的時間間隔值;
[0100]設置監(jiān)控的時間間隔值可以為30秒至2分鐘,根據(jù)實際情況而定,在這段間隔時間內(nèi),有可能終端轉(zhuǎn)動后方位發(fā)生了改變,也有可能終端轉(zhuǎn)動后回到了原來的位置。通過預設的時間間隔可以更清楚用戶的動作,做出更節(jié)省內(nèi)存運算的操作。
[0101]第二時刻記錄單元302,用于當系統(tǒng)重力傳感器發(fā)生方位變化的時候,會通告監(jiān)聽器,此時根據(jù)監(jiān)聽器重新計算新的系統(tǒng)重力感應檢測的方位值,記為第二時刻;
[0102]第一方位比較單元303,用于比較第一時刻獲取的方位以及第二時時刻獲取的方位,若發(fā)生變化,則進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣;
[0103]更進一步地,本實施例二中的第一方位比較單元303還具有以下單元:
[0104]第三時刻記錄單元304,用于等待預設的時間間隔,再次獲取系統(tǒng)當前棧頂應用對應的方位值,記為第三時刻;
[0105]第二方位比較單元305,用于比較第二時刻獲取的方位以及第三時時刻獲取的方位,若發(fā)生變化,則進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣。
[0106]坐標旋轉(zhuǎn)逆變換單元400、對用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠準確投遞到對應的浮窗內(nèi)部Π組件上。
[0107]綜上,本實施例中,由于時間間隔的存在,如果終端檢測到第一時刻與第二時刻沒有發(fā)生方位變化,則有可能如下的步驟:丟棄第二時刻的數(shù)據(jù)或返回第一時刻方位記錄單元301等等,只有當檢測到發(fā)生方位的變化,才進行重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣的操作,本技術方案具有計算量較小,效率更高,浮窗Π組件外觀更自然的有益效果之外,更進一步節(jié)省了系統(tǒng)的資源,同時,更進一步減少了內(nèi)存數(shù)據(jù)的運算。
[0108]請參考圖6,其是本發(fā)明實施例三,一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)裝置,與上述圖5中的實施例一大部分模塊相同,該裝置包括了畫面容器提供單元100、畫面內(nèi)容生成單元200、標旋轉(zhuǎn)逆變換單元400,不同之處在于:方位獲取單元300,具體說明如下:
[0109]畫面容器提供單元100,用于為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器;
[0110]畫面內(nèi)容生成單元200,用于生成畫面對應的內(nèi)容并添加到所述的畫面容器中,所述的內(nèi)容即為Π浮窗視圖;
[0111]第一方位獲取單元401,用于獲取當前的用戶點擊事件的活動對應的第一方位并監(jiān)聽所述的活動的棧頂,以便跟隨所述的活動的對應的方位進行變化。
[0112]通過獲取用戶點擊的方位并監(jiān)聽方位,可以更進一步明確用戶的動向。
[0113]重力傳感器獲取單元402,用于獲取當前的重力傳感器的第二方位并注冊所述的重力傳感器的監(jiān)聽器,以便跟隨所述的重力傳感器的方向進行變化。
[0114]通過獲取重力傳感器的方位并監(jiān)聽方位,可以更進一步明確終端發(fā)生轉(zhuǎn)換的動向。
[0115]旋轉(zhuǎn)補償單元403,用于當?shù)谝环轿换虻诙轿话l(fā)生變化時,進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣;
[0116]標旋轉(zhuǎn)逆變換單元400、對用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得事件能夠準確投遞到對應的浮窗內(nèi)部Π組件上。
[0117]以Android平臺舉例說明,獲取當前的Activity對應的Orientat1n (記為ContextOrientat1n)并監(jiān)聽 Activity 棧頂以便跟隨 Activity 對應的 Orientat1n 的變化。
[0118]獲取當前重力傳感器的Orientat1n (記為SensorOrientat1n)并注冊重力傳感器監(jiān)聽器以便跟隨傳感器的方向。
[0119]綜上,本實施例中,通過跟隨所述的用戶點擊的活動以及重力傳感器的對應的方位進行變化,從而作出重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣之類的操作,使浮窗Π組件實現(xiàn)更具體、更細致、更精確。本技術方案具有計算量較小,效率更高,浮窗Π組件外觀更自然的有益效果之外,更進一步實現(xiàn)了浮窗UI組件的及時性、靈活性以及應對性。
[0120]對于上述裝置實施例中提到的旋轉(zhuǎn)算法,更具體地說明如下:
[0121]Orientat1n包括四個值:正豎屏、反豎屏、正橫屏、反橫屏。約定對應的旋轉(zhuǎn)角度(逆時針)值為O度、180度、90度、270度。把上面的兩個Orientat1n依次轉(zhuǎn)化為角度值,分別記為:ContextDegree, SensorDegree0
[0122]根據(jù)公式,計算補償角度:
[0123]CompsateDegree=-ContextDegree+SensorDegree。
[0124]當發(fā)現(xiàn)重力傳感器的SensorOrientat1n或棧底的ContextOrientat1n發(fā)生變化時,則依據(jù)上述的補償公式進行相應的旋轉(zhuǎn)補償。根據(jù)Android的顯示原理,這可以通過把上述的角度更新到RotateLayout ViewGroup的一個屬性值中,并通過RotateLayout的requestLayoutO強制觸發(fā)Π的重新布局和繪制。整個重新布局和重新繪制過程主要如下:
[0125]UonMeasure ():若旋轉(zhuǎn)后的角度為90度/270度,貝U在measureChild O前進行寬高置換,否則不變。
[0126]2> onLayout ():通過當前的旋轉(zhuǎn)角度,利用Matrix.setRotate O計算旋轉(zhuǎn)補償矩陣,并對RotateLayout的顯示坐標(相當于外框)進行相應的旋轉(zhuǎn)。
[0127]3、onDraw O:對傳遞進來的Canvas進行旋轉(zhuǎn),使得RotateLayout的繪制本身體現(xiàn)出旋轉(zhuǎn)的結(jié)果。
[0128]4、dispatchDraw ():在分發(fā)Canvas給到子View之前,對該Canvas進行旋轉(zhuǎn)補償,補償?shù)姆椒礊楦鶕?jù)當前旋轉(zhuǎn)的角度alpha,對Canvas圍繞RotateLayout的中心點進行-alpha的旋轉(zhuǎn),這樣子View在繪制時將能夠體現(xiàn)出旋轉(zhuǎn)的特性。
[0129]上述的結(jié)果使得RotateLayout內(nèi)的子View不需要處理任何旋轉(zhuǎn)相關邏輯,因為所有的旋轉(zhuǎn)都被RotateLayout補償過了,子View看起來就像旋轉(zhuǎn)沒有發(fā)生過一樣。而這種假象僅僅建立在繪制的基礎之上。
[0130]當用戶在浮窗內(nèi)進行點擊的時候,和上述重布局和重繪邏輯一樣,此時也必須對點擊坐標進行旋轉(zhuǎn)補償,以便事件能夠投遞到真正的控件上。主要是:在RotateLayout的dispatchTouchEvent O中,通過前述的旋轉(zhuǎn)矩陣,對傳遞進來的Mot1nEvent的坐標值進行旋轉(zhuǎn)的預處理之后,通過super.dispatchTouchEvent (Mot1nEvent)再把事件投遞到對應的子View上。
[0131]請參閱圖7,實施例一,一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的終端10,包括終端本體500,終端10還具有與終端本體500相連的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置I。
[0132]由于具有可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置1,故:
[0133]本技術方案中的終端通過重繪浮窗以及坐標的旋轉(zhuǎn)逆變換等“假象”生成的浮窗UI組件,不需要改動原有的浮窗UI組件,新繪的浮窗UI組件看起來像沒發(fā)生旋轉(zhuǎn)一樣,克服了現(xiàn)有技術中浮窗UI組件實現(xiàn)旋轉(zhuǎn)的功能,需要修改大量的UI組件,或需要準備多套畫面候選,或需要動畫顯示等等效率低下,計算復雜的不足,本技術方案具有計算量較小,效率更高,浮窗Π組件外觀更自然的有益效果。
[0134]請參閱圖8,實施例二,一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的終端20,包括終端本體500,終端20具有與終端本體500相連的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置2。
[0135]由于具有可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置2,故:
[0136]由于時間間隔的存在,如果終端檢測到第一時刻與第二時刻沒有發(fā)生方位變化,則有可能如下的步驟:丟棄第二時刻的數(shù)據(jù)或返回第一時刻方位記錄單元301等等,只有當檢測到發(fā)生方位的變化,才進行重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣之類的操作,本技術方案具有計算量較小,效率更高,浮窗Π組件外觀更自然的有益效果之外,更進一步節(jié)省了系統(tǒng)的資源,同時,更進一步減少了內(nèi)存數(shù)據(jù)的運算。
[0137]請參閱圖9,實施例三,一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的終端30,包括終端本體500,終端30還包括與終端本體500相連的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置3。
[0138]由于具有可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置3,故:
[0139]本實施例中,終端30通過跟隨所述的用戶點擊的活動以及重力傳感器的對應的方位進行變化,從而作出重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣之類的操作,使浮窗Π組件實現(xiàn)更具體、更細致、更精確。本技術方案具有計算量較小,效率更高,浮窗Π組件外觀更自然的有益效果之外,更進一步實現(xiàn)了浮窗Π組件的及時性、靈活性以及應對性。
[0140]其中,圖7至圖9中所述的終端本體500,具體包括:智能手機、電子書閱讀器、MP3播放器、MP4播放器、筆記本電腦、平板電腦等等。
[0141]本領域普通技術人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關的硬件完成,該程序可以存儲于一計算機可讀存儲介質(zhì)中,存儲介質(zhì)可以包括存儲器、磁盤或光盤等。
[0142]以上內(nèi)容僅為本發(fā)明的較佳實施例,對于本領域的普通技術人員,依據(jù)本發(fā)明的思想,在【具體實施方式】及應用范圍上均會有改變之處,本說明書內(nèi)容不應理解為對本發(fā)明的限制。
【權利要求】
1.一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的方法,其特征在于,包括: 為待顯示的UI浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器; 生成畫面對應的內(nèi)容并添加到所述畫面容器中,所述的內(nèi)容即為Π浮窗視圖; 獲取系統(tǒng)當前棧頂應用對應的方位屬性以及系統(tǒng)重力感應檢測的方位,當系統(tǒng)當前棧頂應用對應的方位或者/以及系統(tǒng)重力感應檢測的方位發(fā)生變化時,進行旋轉(zhuǎn)補償,重新繪制所述的UI浮窗,獲取旋轉(zhuǎn)逆矩陣; 根據(jù)所述旋轉(zhuǎn)逆矩陣對用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得所述事件能夠投遞到對應的浮窗內(nèi)部Π組件上。
2.根據(jù)權利要求1所述的方法,其特征在于,所述的系統(tǒng)為具有Android平臺的終端系統(tǒng)。
3.根據(jù)權利要求1所述的方法,其特征在于,所述的方位的角度為90度的整數(shù)倍數(shù)。
4.根據(jù)權利要求1至3任一項所述的方法,其特征在于,所述生成畫面對應的內(nèi)容并添加到所述畫面容器中,包括:通過inf later的inflate O方法生成對應的內(nèi)容View并添加到所述畫面容器中。
5.根據(jù)權利要求1所述的方法,其特征在于,所述的獲取系統(tǒng)當前棧頂應用對應的方位以及系統(tǒng)重力感應檢測的方位,當系統(tǒng)當前棧頂應用對應的方位或者/以及系統(tǒng)重力感應檢測的方位發(fā)生變化時,進行旋轉(zhuǎn)補償,重新繪制所述的Π浮窗,獲得旋轉(zhuǎn)逆矩陣,包括: 獲取系統(tǒng)當前棧頂應用對應的方位以及系統(tǒng)重力感應檢測的方位,記為第一時刻;同時注冊系統(tǒng)的重力傳感器監(jiān)聽器,啟動系統(tǒng)棧頂監(jiān)控程序,設置監(jiān)控的時間間隔值; 當系統(tǒng)重力傳感器發(fā)生方位變化的時候,通告監(jiān)聽器,此時根據(jù)監(jiān)聽器重新計算新的系統(tǒng)重力感應檢測的方位值,記為第二時刻; 比較第一時刻獲取的方位以及第二時時刻獲取的方位,若發(fā)生變化,則進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣。
6.根據(jù)權利要求5所述的方法,其特征在于,所述的比較第一時刻獲取的方位以及第二時時刻獲取的方位,若發(fā)生變化,則進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣之后,具有以下步驟: 等待預設的時間間隔,再次獲取系統(tǒng)當前棧頂應用對應的方位值,記為第三時刻; 比較第二時刻獲取的方位以及第三時時刻獲取的方位,若發(fā)生變化,則進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣。
7.根據(jù)權利要求1所述的方法,其特征在于,所述的旋轉(zhuǎn)補償,包括:計算補償角度,所述計算補償角度的公式為:
CompsateDegree=-ContextDegree+SensorDegree ; 其中,CompsateDegree為補償角度值;
ContextOrientat1n為用戶點擊事件的活動的方位值;
SensorOrientat1n為系統(tǒng)檢測的方位值。
8.根據(jù)權利要求1所述的方法,其特征在于,所述的方位,包括:正豎屏、反豎屏、正橫屏或反橫屏。
9.一種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置,其特征在于,包括: 畫面容器提供單元,用于為待顯示的Π浮窗視圖提供支持旋轉(zhuǎn)屬性的畫面容器; 畫面內(nèi)容生成單元,用于生成畫面對應的內(nèi)容并添加到所述畫面容器中,所述的內(nèi)容即為Π浮窗視圖; 方位獲取單元,用于獲取系統(tǒng)當前棧頂應用對應的方位屬性以及系統(tǒng)重力感應檢測的方位,當系統(tǒng)當前棧頂應用對應的方位或者/以及系統(tǒng)重力感應檢測的方位發(fā)生變化時,進行旋轉(zhuǎn)補償,重新繪制所述的UI浮窗,獲取旋轉(zhuǎn)逆矩陣; 坐標旋轉(zhuǎn)逆變換單元,用于根據(jù)所述旋轉(zhuǎn)逆矩陣對用戶點擊事件的坐標進行旋轉(zhuǎn)逆變換,從而使得所述的事件能夠投遞到對應的浮窗內(nèi)部UI組件上。
10.根據(jù)權利要求9所述的裝置,其特征在于,所述的系統(tǒng)為具有Android平臺的終端系統(tǒng)。
11.根據(jù)權利要求9所述的裝置,其特征在于,所述的方位的角度為90度的整數(shù)倍數(shù)。
12.根據(jù)權利要求9至11任一項所述的裝置,其特征在于,所述生成畫面對應的內(nèi)容,包括:通過inf later的inflate O方法生成對應的內(nèi)容View并添加到所述的畫面容器中。
13.根據(jù)權利要求9所述的裝置,其特征在于,所述的方位獲取單元,包括: 第一時刻獲取單元,用于獲取系統(tǒng)當前棧頂應用對應的方位以及系統(tǒng)重力感應檢測的方位,記為第一時刻,同時注冊系統(tǒng)的重力傳感器監(jiān)聽器,啟動系統(tǒng)棧頂監(jiān)控程序,設置監(jiān)控的時間間隔值; 第二時刻獲取單元,用于當系統(tǒng)重力傳感器發(fā)生方位變化的時候,通告監(jiān)聽器,此時根據(jù)監(jiān)聽器重新計算新的系統(tǒng)重力感應檢測的方位值,記為第二時刻; 第一方位比較單元,用于比較第一時刻獲取的方位以及第二時時刻獲取的方位,若發(fā)生變化,則進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣。
14.根據(jù)權利要求13所述的裝置,其特征在于,所述的第一方位比較單元之后具有以下單元: 第三時刻獲取單元,用于等待預設的時間間隔,再次獲取系統(tǒng)當前棧頂應用對應的方位值,記為第三時刻; 第二方位比較單元,用于比較第二時刻獲取的方位以及第三時時刻獲取的方位,若發(fā)生變化,則進行旋轉(zhuǎn)補償,重新繪制所述的浮窗,獲得旋轉(zhuǎn)逆矩陣。
15.根據(jù)權利要求9所述的裝置,其特征在于,所述的旋轉(zhuǎn)補償,具體包括:所述的旋轉(zhuǎn)補償?shù)难a償角度的公式為:
CompsateDegree=-ContextDegree+SensorDegree。 其中,CompsateDegree為補償角度值;
ContextOrientat1n為用戶點擊事件的活動的方位值;
SensorOrientat1n為系統(tǒng)檢測的方位值。
16.根據(jù)權利要求9所述的裝置,其特征在于,所述的方位,包括:正豎屏、反豎屏、正橫屏、反橫屏。
17.—種可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的終端,其特征在于,所述的終端包括如權利要求9至16任一項所述的可跟隨屏幕自動旋轉(zhuǎn)的浮窗實現(xiàn)的裝置。
【文檔編號】G06F9/44GK104133663SQ201310334914
【公開日】2014年11月5日 申請日期:2013年8月2日 優(yōu)先權日:2013年8月2日
【發(fā)明者】陳建銘 申請人:騰訊科技(深圳)有限公司