2012-08-03 46 views
0

我開發了一個在相機視圖上顯示標記的增強現實應用程序。 標記是通過獲取數據庫中的位置動態創建的視圖。標記代表建築物,例如名稱和位置(緯度/經度)。Android:如何不重疊動態視圖? +視圖的動態位置

當應用程序啓動時,我得到手機的當前位置,並根據手機的位置和方向(SensorManager)在屏幕上顯示標記。

問題是,當標記處於相同方向時,它們是重疊的。我希望標記是一對一排列的。

我試過使用RelativeLayout,但它不會改變任何東西。

代碼標記創建:

@Override 
public void onResume() { 
    super.onResume(); 


     for(int j=0;j<markers.length;j++) { 
      //System.out.println(prefMarkers[j]); 
      if(markers[j] == null) { 

       RelativeLayout.LayoutParams rParams = new RelativeLayout.LayoutParams(
         RelativeLayout.LayoutParams.WRAP_CONTENT, 
         RelativeLayout.LayoutParams.WRAP_CONTENT); 

        markers = new DataList(); // My list of markers 
        for(int i=0; i<markers.size();i++) { 
         markers[i].setOnClickListener(clickListener); 
          //addContentView(markers[j].get(i), params); 
          relative.addView(markers[j].get(i), rParams); 
        } 
       } 
      }}} 

代碼時的位置變化(標記移動):

public final static void moveSpot(Context c, View tv, GeoPoint p, 
     float azimut, Location me, int screenWidth, float roll, 
     int screenHeight, float pitch) { 
    int angle = // Calculation for the position of the markers 
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
      FrameLayout.LayoutParams.WRAP_CONTENT, 
      FrameLayout.LayoutParams.WRAP_CONTENT); 

      lp.leftMargin = -angle * screenWidth/90; 

    lp.addRule(RelativeLayout.ABOVE); 

    tv.setLayoutParams(lp); 
} 

public SensorEventListener createListener() { 
    return new SensorEventListener() { 
     public void onAccuracyChanged(Sensor _sensor, int _accuracy) { 

     } 

     public void onSensorChanged(SensorEvent evt) { 
      if (evt.sensor.getType() == Sensor.TYPE_ORIENTATION && markers != null) { 

       for(int j=0;j<markers.length;j++) 
        moveSpot(context, markers[i], markers[i] 
            .getGeoPoint(), azimut, myLoc, 
            mScreenWidth, roll, mScreenHeight, pitch); 

     } 
    }; 
} 

我想我不走正道,所以我該怎麼做才能防止標記重疊? 如果您需要精確度,請問我會盡可能精確。

很遺憾我的英語不好:/


編輯:感謝Martin還原的反應,我解決我的問題的一部分。現在我沒有重疊的問題,而是位置的問題。

這裏我的應用程序的截圖現在:

http://hpics.li/f7c402b

這張圖片上,我們可以看到有沒有反正重疊的問題。 ,我想這樣做是在這部翻拍的截圖:

http://hpics.li/25a059d

我希望我清楚這個時間:X

回答

0

你需要每查看您創建分配一個ID,你的ViewGroup。

如果每個標記是查看使用類似:

yourview[j].setId(j); 

做到這一點你申請你addRule()之前到您的「LP」的佈局。

編輯:

您也可以考慮採取各種視圖位置的參考做這樣的事情:

lp.addRule(RelativeLayout.ABOVE, yourview[j-1]); 
+0

謝謝,我做到了,結果要好得多,但我想,只有重疊視圖會相互顯示,因爲某些標記會通過屏幕:/ 但是,這是一個很好的進展,現在標記不會重疊:) – Pidikan 2012-08-03 10:14:31

+0

很高興它有幫助,請接受並檢查響應是否有效,以便其他人可以重複使用它在未來。謝謝! – 2012-08-03 10:16:56

+0

對不起,我編輯了我的答案,它有幫助但沒有解決問題:/ – Pidikan 2012-08-03 10:20:14