路線規(guī)劃提供了獲取路線距離的方法,見MKRoutePlan 類的 getDistance 方法。
創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、南靖網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站、商城網(wǎng)站定制開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為南靖等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
如果是計算任意兩點(diǎn)的距離,自2.0.0版本開始,Android SDK為開發(fā)者提供了計算距離的接口(DistanceUtil),具體使用方法如下:
1.GeoPoint p1LL = new GeoPoint(39971802, 116347927);
2.GeoPoint p2LL = new GeoPoint(39892131, 116498555);
3.double distance = DistanceUtil.getDistance(p1LL, p2LL);
如果開發(fā)者使用的是1.3.5及以前的版本,在計算任意兩點(diǎn)之前的距離時,有如下兩種方法:一種利用勾股定理計算,適用于兩點(diǎn)距離很近的情況;一種按標(biāo)準(zhǔn)的球面大圓劣弧長度計算,適用于距離較遠(yuǎn)的情況。
在Android屏幕的空間中,大部分的區(qū)域我們都是可以隨意繪制,只有一部分區(qū)域是顯示的固定內(nèi)容:
其中標(biāo)題欄是可選的,除了Material風(fēng)格的應(yīng)用應(yīng)用的并不多,頁面內(nèi)容就是android.R.id.content是Activity的主要內(nèi)容。
而我們主要需要討論的就是 狀態(tài)欄和導(dǎo)航欄,因?yàn)檫@兩個區(qū)域在不同設(shè)備類型,不同的Android版本和不同的廠商下大小和效果是不同的,等等。這些差異無疑增加了我們做頁面適配的復(fù)雜程度,也更容易出現(xiàn)兼容問題。
在2017年下半年iPhone X的發(fā)布,引入了劉海屏設(shè)備,導(dǎo)致了藍(lán)綠大廠爭相效仿,同時又自成一派,頗有一番百家爭鳴之象。
這也導(dǎo)致了一個新的問題 劉海區(qū)域適配 ,那時候Android才8.1,并沒有API來支持這屏幕上這多出來的一塊區(qū)域,不過好在大部分設(shè)備在定制時劉海和狀態(tài)欄高度是一致的。
終于在2018年發(fā)布的Android 9中Google正式支持了劉海屏,定制了規(guī)范約束了設(shè)備廠商,減輕了劉海屏適配的差異問題,但是根源問題并沒有解決。因?yàn)閯⒑^(qū)域的存在,可能會出現(xiàn)頁面內(nèi)容被遮擋,比如:啟用頁廣告跳過按鈕被遮擋的問題,導(dǎo)致被應(yīng)用商店拒掉的風(fēng)險。
不過好在Android 9中要求劉海設(shè)備必須有以下行為:
劉海高度默認(rèn)是和狀態(tài)欄高度一致依舊沒有變,所以問題又回到了狀態(tài)欄區(qū)域的處理 。
所以肯定有同學(xué)說了:直接獲取狀態(tài)欄高度不就可以了適配劉海屏了。像這樣:
這么說也沒有錯,大部分情況下是沒有問題的。但是既然官方已經(jīng)適配劉海屏了,也為我們提供了新的API為什么不用呢:
上面的方案實(shí)際上可以獲取上下左右四個方向的安全距離,但大部分情況我們只需要處理頂部就可以了。實(shí)際上這已經(jīng)可以解決我們的問題了,但是還有更好的解決方案方案:
2.使用ViewCompat工具
實(shí)際上屏幕安全距離,基本上全部圍繞這一個API,Google也推薦我們這么做,在很多系統(tǒng)控件都能看到它的影子,比如:AppBarLayout、DrawerLayout、NavigationBarView等等都有用到,內(nèi)部都是來處理系統(tǒng)安全距離的。
系統(tǒng)欄適配
上面提到了手機(jī)有各種系統(tǒng)欄(狀態(tài)欄、導(dǎo)航欄),如果一個全屏+劉海屏+透明系統(tǒng)欄+屏幕旋轉(zhuǎn)的頁面處理這些安全距離就更復(fù)雜,比如短視頻頁,這里先給大家列幾條可能出現(xiàn)的問題:
這些所有的問題通過ViewCompat.setOnApplyWindowInsetsListener() 來優(yōu)雅處理,通過 WindowInsetsCompat.getInsets(type) 可以獲取系統(tǒng)的各個欄的大小,我們也可以同時獲取多個系統(tǒng)欄的高度,各個距離內(nèi)部會進(jìn)行累加,返回一個類似Rect的對象,對應(yīng)屏幕的左上右下需要插入的距離:
然后在對不同位置的控件添加對應(yīng)的邊距。除了上面提到的三種類型的安全距離,還有一些其他的類型,有興趣的可以自己了解。
ViewCompat.setOnApplyWindowInsetsListener()能解決大部分安全距離的問題,但是有一點(diǎn)它是處理不了的,就是 屏幕圓角,這些安全距離的計算是不處理屏幕圓角的,所以如果有圓角要處理那我們就要另辟蹊徑了。
好在Android 12中官方添加了對圓角的支持:
我用了Pixel4真機(jī)發(fā)現(xiàn)能獲取到數(shù)據(jù),但是模擬器獲取不到。
除了圓角支持,還有對隱私指示器提供了支持:
隱私指示器的范圍,主要是 攝像頭和麥克風(fēng) 使用中狀態(tài)的指示器邊界,如果是錄制直播或者相機(jī)的頁面需要處理這個區(qū)域。
除了圓角以外,好像沒有找到官方對打孔屏的支持,可能后面會加入對打孔屏的支持吧。
兩點(diǎn)之間的距離是6378.137。
給定兩點(diǎn)的經(jīng)緯度。計算兩點(diǎn)之間的距離。這里要注意經(jīng)緯度一定要依照順序填寫
1. 利用android中的工具獲得,單位是米。
2. 通過計算的方式獲得,單位是公里。
當(dāng)兩點(diǎn)的距離較近時使用兩種方式計算的結(jié)果基本一致,但是當(dāng)兩點(diǎn)的距離比較遠(yuǎn)時,計算的結(jié)果就會相差甚遠(yuǎn),比較發(fā)現(xiàn)兩點(diǎn)之間計算球面距離的方式更加精確一些,更貼近實(shí)際距離。本文重點(diǎn)講解兩點(diǎn)之間球面距離的計算方式。
文章題目:android距離,android距離傳感器實(shí)現(xiàn)結(jié)果圖
地址分享:http://www.rwnh.cn/article42/dssohhc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、做網(wǎng)站、云服務(wù)器、網(wǎng)站建設(shè)、服務(wù)器托管、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)