一 概說
Android的 2D圖畫典型有兩種方式: 不論(1)或(2) 最終都是將這個view 加入一個layout 或是 直接將這個view 指定給activity 作為contenview---setContentView();
(1).定義 graphic 元件(某些drawable, animation) 進入在 layout 中的 view(background) or 直接imageView.
(2).直接在 view 物件的 draw() 中作畫.
其中(1)適合靜態的顯示圖畫(grachic)或是事先定義好的動畫(android animation物件). (2)適合複雜自訂的一些動畫. 且需要定時 redraw 這個view. 一些 video game 應該都是用這個方法.
(2)中又有兩種方式. 同一個 thread (invalidate)使用一般的 view 元件. 兩個 thread使用 SurfaceView
一般的view元件: 不需要很快的畫面更新速度時使用.
SurfaceView元件:是 view 物件的一種特殊子類別. 其特點是系統開第二個 thread 去處理畫面的圖畫更新. 所以在主程式裡, 不必等主程序處理到ondraw時才更新畫面.
2010年10月6日 星期三
2010年9月9日 星期四
Android: Get the GPS location with timeout
Android 要取得目前的位置, 除了在設定裡手動啟動 GPS定位外, 還要註冊 LocationListener 使得在位置更新能觸發 method: onLocationChanged().
GPS如果在室內收不到訊號時. 就不會觸發onLocationChanged(), 很多時候我們只要抓目前的位置去作後續的處理. 所以需要 timeout 機制以避免程式無限制的等下去. 因為gps持續運作會很耗電力.
但android 目前沒有timout的機制. 以下是一段加入timeout機制的例子. 其中呼叫 initGPS() 後程式同時啟動 GPS 與 network 兩種方式定位. 在timeout 時間內兩種定位都取得位置後程式回傳最優位置. 如果gps在時間內先取得定位 程式直接回傳最優位置. 如果timeout時間到還沒取得定位. 程式回傳 lastlocation.
直接copy貼上程式後面. 然後修改註記 '***********************'的地方就可以用了.
GPS如果在室內收不到訊號時. 就不會觸發onLocationChanged(), 很多時候我們只要抓目前的位置去作後續的處理. 所以需要 timeout 機制以避免程式無限制的等下去. 因為gps持續運作會很耗電力.
但android 目前沒有timout的機制. 以下是一段加入timeout機制的例子. 其中呼叫 initGPS() 後程式同時啟動 GPS 與 network 兩種方式定位. 在timeout 時間內兩種定位都取得位置後程式回傳最優位置. 如果gps在時間內先取得定位 程式直接回傳最優位置. 如果timeout時間到還沒取得定位. 程式回傳 lastlocation.
直接copy貼上程式後面. 然後修改註記 '***********************'的地方就可以用了.
訂閱:
文章 (Atom)