2010-09-30 63 views
10

我想你已經在地圖中嘗試了「Google地方信息」。 這是接近你的興趣點列表。Android:指南針+在列表視圖中的距離

我真的很想在我的應用程序中使用GPS座標列表來做同樣的功能,但看起來很複雜。

使距離和小箭頭的列表視圖很容易,但我不明白如何更新此列表和箭頭每次用戶移動他的手機。

現在我有一個靜態列表視圖。

alt text

我想知道,如果有人成功創建這樣一個列表視圖。

非常感謝任何信息。

回答

10

有幾個選項可供您嘗試實現。就個人而言,我建議實現您自己的適配器(很可能在這種情況下通過擴展SimpleCursorAdapter)並將更新封裝在距離文本和指南針標題旋轉中。

爲了幫助進行資源管理,您可能希望在將承載ListView的Activity中創建SensorListener和LocationListener。無論何時您收到更新請求,都會在您的Adapter類中調用您自推出的updateCompassAndLocation方法。

從該方法中您有兩個選項。要麼迭代組成要呈現的數據集合的每個項目,並修改指南針圖形和距離文本,或者只將當前位置和標題記錄爲類中的變量,並調用notifyDataSetChanged以強制適配器更新視圖本身在getView方法內。無論哪種情況(特別是後者),您都需要在getView中設置距離文本和標題指南針值。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LinearLayout myView; 

    MyPOI item = getItem(position); 

    Location poiLocation = item.getLocation; 

    int compassHeading = // Calculate heading relative to current heading 
    float distance = // Calculate distance to POI 


    if (convertView == null) { 
    myView = new LinearLayout(getContext()); 
    String inflater = Context.LAYOUT_INFLATER_SERVICE; 
    LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater); 
    vi.inflate(resource, myView, true); 
    } else { 
    trainView = (LinearLayout) convertView; 
    } 

    TextView distanceView = (TextView)trainView.findViewById(R.id.distance); 
    ImageView compassView = (ImageView)trainView.findViewById(R.id.compass); 

    distanceView.setText(String.valueOf(distance); 
    compassView.setImageLevel(compassHeading); 
} 
+0

對不起。幾個月前我嘗試了您的解決方案,我對此非常滿意。非常感謝! – 2011-02-08 22:20:20

+0

@Waza_Be如果你可以發佈你已經實現的解決方案,這將是很好的,我也試圖做同樣的事情,我面臨的問題與指南針標題rotation.Thanks .. – dharan 2012-09-05 10:56:48