1

我开发了一个在相机视图上显示标记的增强现实应用程序。标记是通过获取数据库中的位置动态创建的视图。例如,标记代表建筑物,由名称和位置(纬度/经度)描述。

当应用程序启动时,我会获取手机的当前位置,并根据它们的位置和手机的方向(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 Revert 的回复,我解决了部分问题。现在我没有重叠的问题,而是位置的问题。

这是我现在的应用程序的屏幕截图:

http://hpics.li/f7c402b

在这张图片上,我们可以看到无论如何都没有重叠的问题。我想做的是在这个截图的重拍中:

http://hpics.li/25a059d

我希望这次我清楚了:x

4

1 回答 1

1

您需要为您在 ViewGroup 上创建的每个视图分配一个 ID。

如果每个标记都是一个视图,请使用以下内容:

yourview[j].setId(j);

在将 addRule() 应用到“lp”布局之前执行此操作。

编辑:

您还可以考虑参考每个视图位置,执行以下操作:

lp.addRule(RelativeLayout.ABOVE, yourview[j-1]);
于 2012-08-03T09:55:03.793 回答