Android:指南針的制作

指南針主要是通過方向傳感器來獲取方位的,使用傳感器呢,我們主要用到SensorManager類和Sensor類,通過getSystemService(Context.SENSOR_SERVICE)來初始化SensorManager對象,通過getDefaultSensor(Sensor.TYPE_ORIENTATION)來初始化Sensor對象。在下邊我們需要對傳感器進(jìn)行注冊,注冊方法registerListener(SensorEventListener listener, Sensor sensor,int samplingPeriodUs)的第一個參數(shù)我們需要實現(xiàn)這個接口并復(fù)寫相應(yīng)的方法,在方法onSensorChanged(SensorEvent event)中我們可以通過event.values[0]來獲取方位,這個數(shù)值的方位是(正北:0/360 ? 正東:90 ? 正南:180 ? 正西:270)我們獲取的是0到360的數(shù)值,但是實際上這些數(shù)值對應(yīng)的方位和現(xiàn)實中指南針的方位是對稱的,也就是關(guān)于Z軸對稱。因此我們經(jīng)常采用-event.values[0]。然后整個輪盤轉(zhuǎn)動我這里采用的是一個自定義的旋轉(zhuǎn)動畫來做的,接下來就直接上代碼了。

源代碼:(碼云:https://gitee.com/zhanma/codes/qw28ndj0akcpvf65hl1rg41)

MainActivity:


DefinedRotateAnimation (自定義旋轉(zhuǎn)動畫):


MainActivity中44行提到一個bringToFront(),這個方法用來把控件調(diào)到前景,因為我在指南針中設(shè)置了一個(TextView)指標(biāo),方便看出來當(dāng)前的轉(zhuǎn)到正中央的數(shù)值是多少。然后TextView控件和ImageView正好后者把前者覆蓋了,因此調(diào)用此方法把它調(diào)到上一層。自定義動畫這塊用到initialize方法,用來初始化動畫,applyTransformation方法用來實現(xiàn)動畫變形(也就是實現(xiàn)動畫的效果)

運行截圖:


由于模擬器不方便測試這方向傳感器,所以我就使用真機調(diào)試,上面的運行截圖都是從真機上截圖下來的。

以上是關(guān)于Android指南針的制作。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容