生活随笔
收集整理的這篇文章主要介紹了
GSView
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
GSView
用了一下午和一晚上寫完了一個小DEMO,還順便研究了一下如何用手機(jī)錄GIF,手機(jī)不想root,花了點(diǎn)時(shí)間。
這幾天晚上玩手機(jī)的時(shí)候,突然有一個想法,app上的title和按鈕在單手操作的時(shí)候,尤其是大屏手機(jī),一直手按左上角返回的時(shí)候不方便,晚上躺著玩手機(jī),尤其是側(cè)臥的時(shí)候,很不愿意用另一只手,這幾天晚上還有蚊子,只露出一直手玩手機(jī)就好了(-_-)。有什么解決辦法呢,安卓不是內(nèi)置了重力感應(yīng)么,使用這個功能還不用權(quán)限,可以試試。
重力感應(yīng)的核心類是SensorManager,基本上沒什么難度,實(shí)現(xiàn)SensorEventListener的接口,重寫onSensorChanged()和onAccuracyChanged(),主要操作在onSensorChanged()里面,onSensorChanged()可以說是時(shí)刻都在變化,注意里面不要寫一些耗時(shí)操作,不然會被調(diào)用很多次。
@Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor == null) {return;}if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {int x = (int) event.values[0];int y = (int) event.values[1];int z = (int) event.values[2];}}
通過代碼片段,可以看到,整個重力感應(yīng)的封裝很簡單,我們只要關(guān)心 event.values數(shù)組的前三個參數(shù)即可,當(dāng)然了 event.values[]其實(shí)是float類型的,我們?yōu)榱朔奖阌?jì)算,轉(zhuǎn)成Int即可,除非你需要很高的精度,手機(jī)的左右側(cè)翻我們只需要關(guān)心X即可,當(dāng)然這里是指豎屏狀態(tài)下,橫屏需要重新計(jì)算,當(dāng)x>3&&x<-3的時(shí)候,手機(jī)其實(shí)已經(jīng)明顯翻轉(zhuǎn)了,這時(shí)我們就可以進(jìn)行相應(yīng)的操作了,這里為了有更好看的效果,我使用了屬性動畫ValueAnimator,需要注意一點(diǎn),在onSensorChanged中,會多次調(diào)用一個動畫,導(dǎo)致出現(xiàn)了鬼畜的現(xiàn)象,因此需要設(shè)置一個控制變量,當(dāng)動畫執(zhí)行后,才能再次調(diào)用。先看看效果:
首先是向右側(cè)翻手機(jī)
首先是向左側(cè)翻手機(jī)與之類似
由于是在模擬器上錄制的,重力感應(yīng)會有問題,就先拿click事件代替重力事件了,真機(jī)上親測沒問題。
一旦解決了動畫多次調(diào)用的問題,就沒什么難度了,向右移動的時(shí)候,title向右移動的距離是:(屏幕的寬度-title的寬度)/2,back按鈕移動的距離是:屏幕的寬度-title的寬度-back的寬度,類似的向左移動的時(shí)候,back已經(jīng)在最左邊了,移動距離為0,title移動的距離是:(屏幕寬度-title的寬度)/2-back的寬度。當(dāng)手機(jī)平放的時(shí)候,記得復(fù)位。還有一點(diǎn)注意的是ValueAnimator.ofFloat()方法里面可以不定個float的值,沒有特殊需要,傳入一個即可,一般的getAnimatedValue時(shí),會判斷mValues數(shù)組是否為空,如果不為空,就取第一個即可。項(xiàng)目待會傳到網(wǎng)上,代碼是很復(fù)雜。
今天網(wǎng)速很好,代碼詳情:
https://git.oschina.net/w5727/GSView.git
總結(jié)
以上是生活随笔為你收集整理的GSView的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。