示例#1
0
  @Override
  protected void onDraw(Canvas canvas) {
    if (canvas == null) return;

    if (drawing.compareAndSet(false, true)) {
      List<Marker> collection = ARData.getMarkers();

      cache.clear();
      for (Marker m : collection) {
        m.update(canvas, 0, 0);
        if (m.isOnRadar()) cache.add(m);
        cache.add(m);
      }
      collection = cache;

      if (AugmentedActivity.useCollisionDetection) adjustForCollisions(canvas, collection);

      ListIterator<Marker> iter = collection.listIterator(collection.size());
      while (iter.hasPrevious()) {
        Marker marker = iter.previous();
        marker.draw(canvas);
      }
      if (AugmentedActivity.showRadar) radar.draw(canvas);
      drawing.set(false);
    }
  }
示例#2
0
  private static void adjustForCollisions(Canvas canvas, List<Marker> collection) {
    updated.clear();
    for (Marker marker1 : collection) {
      if (updated.contains(marker1) || !marker1.isInView()) continue;

      int collisions = 1;
      for (Marker marker2 : collection) {
        if (marker1.equals(marker2) || updated.contains(marker2) || !marker2.isInView()) continue;

        if (marker1.isMarkerOnMarker(marker2)) {
          marker2.getLocation().get(locationArray);
          float y = locationArray[1];
          float h = collisions * COLLISION_ADJUSTMENT;
          locationArray[1] = y + h;
          marker2.getLocation().set(locationArray);
          marker2.update(canvas, 0, 0);
          collisions++;
          updated.add(marker2);
        }
      }
      updated.add(marker1);
    }
  }