1

私の基礎として、(Thx Jaak)のHelloMap3Dの例をGPS functionality取り上げ、この例とは異なるライトを表示するように調整しました。そのため、黄色の円は成長しませんが、現在の位置としてa を持つ青い半透明の円を修正し、アップデート。メソッドの例のように更新が行われるように、 が変更された場合は過去の位置を消去する必要があります。Nutiteqcurrent GPS positioncenter pointlocationonLocationChanged ここに画像の説明を入力

これは私のメインアクティビティのコードです

protected void initGps(final MyLocationCircle locationCircle) {
    final Projection proj = mapView.getLayers().getBaseLayer().getProjection();

    locationListener = new LocationListener() {
        @Override
        public void onLocationChanged(Location location) {

             locationCircle.setLocation(proj, location);
             locationCircle.setVisible(true);

        }

         // Another Methods...
     }
}

私はMyLocationCircle Classこのように適応しました

public void update() {

    //Draw center with a drawable
    Bitmap bitmapPosition = BitmapFactory.decodeResource(activity.getResources(), R.drawable.ic_home);
    PointStyle pointStyle = PointStyle.builder().setBitmap(bitmapPosition).setColor(Color.BLUE).build();

    // Create/update Point
    if ( point == null ) {          
        point = new Point(circlePos, null, pointStyle, null);
        layer.add(point);
    } else { // We just have to change the Position to actual Position
        point.setMapPos(circlePos);
    }

    point.setVisible(visible);


    // Build closed circle
    circleVerts.clear();
    for (float tsj = 0; tsj <= 360; tsj += 360 / NR_OF_CIRCLE_VERTS) {
        MapPos mapPos = new MapPos(circleScale * Math.cos(tsj * Const.DEG_TO_RAD) + circlePos.x, circleScale * Math.sin(tsj * Const.DEG_TO_RAD) + circlePos.y);
        circleVerts.add(mapPos);
    }

    // Create/update line
    if (circle == null) {           
        LineStyle    lineStyle    = LineStyle.builder().setWidth(0.05f).setColor(Color.BLUE).build();
        PolygonStyle polygonStyle = PolygonStyle.builder().setColor(Color.BLUE & 0x80FFFFFF).setLineStyle(lineStyle).build();//0xE0FFFF
        circle = new Polygon(circleVerts, null, polygonStyle, circle_data);

        layer.add(circle);
    } else {
        circle.setVertexList(circleVerts);
    }
    circle.setVisible(visible);
}

public void setVisible(boolean visible) {
    this.visible = visible;
}

public void setLocation(Projection proj, Location location) {
    circlePos       = proj.fromWgs84(location.getLongitude(), location.getLatitude());
    projectionScale = (float) proj.getBounds().getWidth();
    circleRadius    = location.getAccuracy();

    // Here is the most important modification 
    update();
}

したがって、Position が変更されるたびにonLocationChanged(Location location)Method が呼び出され、そこに呼び出されlocationCircle.setLocation(location)、最後に呼び出さupdateれます。

質問は、私は何を間違えているのですか? どうすれば解決できますか?

前もって感謝します。

4

1 に答える 1

1

更新ごとに新しいサークルを作成して追加します。setVertexList() で頂点を更新するだけで、単一のものを再利用する必要があります。特に、この行はおそらく initGPS のどこかで、onLocationChanged サイクルの外にある必要があります。

circle = new Polygon(circleVerts, null, polygonStyle, circle_data);
于 2014-08-13T11:15:28.023 に答える