簡體   English   中英

Android:如何不重疊動態視圖? +視圖的動態位置

[英]Android : How to not overlap dynamic views? + dynamic position of views

我開發了一個增強現實應用程序,可以在相機視圖上顯示標記。 標記是通過獲取數據庫位置來動態創建的視圖。 標記代表例如建築物,由名稱和位置(緯度/經度)描述。

啟動應用程序后,我將獲得手機的當前位置,並根據其位置和手機的方向在屏幕上顯示標記(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);

        }
    };
}

我認為我沒有采取正確的方法,那么如何防止標記重疊呢? 如果您需要精確度,請詢問,我會盡量保持精確。

很抱歉我的英語不好:/


編輯:感謝馬丁·雷弗特的回應,我解決了部分問題。 現在我沒有重疊的問題,但是位置問題。

現在是我的應用程序的屏幕截圖:

http://hpics.li/f7c402b

在這張照片上,我們可以看到沒有重疊的問題。 我想做的就是截圖的重拍:

http://hpics.li/25a059d

我希望這次我很清楚:x

您需要為在ViewGroup上創建的每個View分配一個ID。

如果每個標記都是一個View,請使用以下方法:

yourview[j].setId(j);

在將addRule()應用於“ lp”布局之前,請執行此操作。

編輯:

您還可以考慮參考每個視圖位置,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM