Exemplo n.º 1
0
  // 받아온 위도 경도 좌표를 지도상에 보여주는 함수
  private void showMyLocation(double latitude, double longitude) {
    NMapViewerResourceProvider mMapViewerResourceProvider = null;
    NMapOverlayManager mOverlayManager;

    mMapViewerResourceProvider = new NMapViewerResourceProvider(this);
    mOverlayManager = new NMapOverlayManager(this, mapview, mMapViewerResourceProvider);

    NGeoPoint myPoint = new NGeoPoint(longitude, latitude);

    // 위치 좌표에 오버레이 아이템을 표시하여 지도상에 보여주는 부분

    // 오버레이 아이템 상에 있는 이미지 PIN을 이용하는 부분
    int markerId = NMapPOIflagType.PIN;

    NMapPOIdata poiData = new NMapPOIdata(1, mMapViewerResourceProvider);
    poiData.beginPOIdata(1);

    // 좌표 정보와 오버레이 아이템 정보, 텍스트 정보를 설정한다.
    poiData.addPOIitem(myPoint, "현재 위치", markerId, 0);
    poiData.endPOIdata();
    NMapPOIdataOverlay poiDataOverlay = mOverlayManager.createPOIdataOverlay(poiData, null);
    poiDataOverlay.showAllPOIdata(0);

    // 지도 상에 위치 좌표와 오버레이 아이템 모두를 보여준다. (최종적으로 지도상에 표시하고 보여주는 부분)
    NMapController controller = mapview.getMapController();
    controller.animateTo(myPoint);
  }
  private void adjustTextBounds(NMapView mapView) {

    //  First determine the screen coordinates of the selected MapLocation
    mapView.getMapProjection().toPixels(mOverlayItem.getPointInUtmk(), mTempPoint);

    int mapViewWidth = mapView.getMapController().getViewFrameVisibleWidth();
    if (mTitleTruncated == null || mWidthTitleTruncated != mapViewWidth) {
      mWidthTitleTruncated = mapViewWidth;
      float maxWidth = mWidthTitleTruncated - 2 * mMarginX - 2 * mPaddingX;
      if (DEBUG) {
        Log.i(
            LOG_TAG,
            "adjustTextBounds: maxWidth="
                + maxWidth
                + ", mMarginX="
                + mMarginX
                + ", mPaddingX="
                + mPaddingX);
      }

      if (mDrawableRightButton != null) {
        maxWidth -= mPaddingX + mCalloutRightButtonWidth;
      }

      if (mTailText != null) {
        mTextPaint.getTextBounds(mTailText, 0, mTailText.length(), mTempRect);
        mTailTextWidth = mTempRect.width();

        maxWidth -= mTailGapX + mTailTextWidth;
      }

      final String title =
          TextUtils.ellipsize(
                  mOverlayItem.getTitle(), mTextPaint, maxWidth, TextUtils.TruncateAt.END)
              .toString();

      mTitleTruncated = title;

      if (DEBUG) {
        Log.i(
            LOG_TAG,
            "adjustTextBounds: mTitleTruncated="
                + mTitleTruncated
                + ", length="
                + mTitleTruncated.length());
      }
    }

    mTextPaint.getTextBounds(mTitleTruncated, 0, mTitleTruncated.length(), mTempRect);

    if (mDrawableRightButton != null) {
      mTempRect.right += mPaddingX + mCalloutRightButtonWidth;
    }

    if (mTailText != null) {
      mTempRect.right += mTailGapX + mTailTextWidth;
    }

    if (DEBUG) {
      Log.i(
          LOG_TAG,
          "adjustTextBounds: mTempRect.width="
              + mTempRect.width()
              + ", mTempRect.height="
              + mTempRect.height());
    }

    //  Setup the callout with the right size & location
    mTempRectF.set(mTempRect);
    final float dy = (mBackgroundHeight - mTempRect.height()) / 2;
    mTempRectF.inset(-mPaddingX, -dy);
    // mTempRectF.inset(-mPaddingX, -mPaddingY);

    // set minimum size
    if (mTempRectF.width() < mMinimumWidth) {
      final float dx = (mMinimumWidth - mTempRectF.width()) / 2;
      mTempRectF.inset(-dx, 0);
    }

    // set position
    float left = mTempPoint.x - (int) (mTempRectF.width() * mOverlayItem.getAnchorXRatio());
    float top =
        mTempPoint.y
            - (int) (mItemBounds.height() * mOverlayItem.getAnchorYRatio())
            - mItemGapY
            - mTotalHeight;
    mTempRectF.set(left, top, left + mTempRectF.width(), top + mTempRectF.height());
  }