Tech. Forum 개발자들을 위한 정보 공유의 장입니다
닫기

Tech.Forum

[Android] t map setCompassMode() 회전관련

#1

setCompassMode(true) 현재위치 좌표를 가져와서 회전을 사용 하고 있습니다.
그런데 지도를 클릭하거나 확대시에 회전이 안되는데 어떻게 해야할지 궁금합니다.

package com.example.tmap_test1;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
import android.widget.LinearLayout;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;

import com.example.tmap_test1.R;
import com.skt.Tmap.TMapGpsManager;
import com.skt.Tmap.TMapMarkerItem;
import com.skt.Tmap.TMapPoint;
import com.skt.Tmap.TMapView;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity
implements TMapGpsManager.onLocationChangedCallback {

private Context mContext = null;
private boolean m_bTrackingMode = true;

private TMapGpsManager tmapgps = null;
private TMapView tmapview = null;
private static String mApiKey = "l7xx1039898bf8964adca3f331c486edecca"; // 발급받은 appKey
private static int mMarkerID;

private ArrayList<TMapPoint> m_tmapPoint = new ArrayList<TMapPoint>();
private ArrayList<String> mArrayMarkerID = new ArrayList<String>();
private ArrayList<com.example.tmap_test1.MapPoint> m_mapPoint = new ArrayList<com.example.tmap_test1.MapPoint>();

@Override
public void onLocationChange(Location location) {
    if (m_bTrackingMode) {
        tmapview.setLocationPoint(location.getLongitude(), location.getLatitude());
    }
}


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mContext = this;

    LinearLayout linearLayout = (LinearLayout) findViewById(R.id.mapview);
    tmapview = new TMapView(this);
    linearLayout.addView(tmapview);

    tmapview.setSKTMapApiKey(mApiKey);

    addPoint();
    showMarkerPoint();

    /* 현재 보는 방향 */
    tmapview.setCompassMode(true);


    /* 현위치 아이콘표시 */
    tmapview.setIconVisibility(true);

    /* 줌레벨 */
    tmapview.setZoomLevel(20);
    tmapview.setMapType(TMapView.MAPTYPE_STANDARD);
    tmapview.setLanguage(TMapView.LANGUAGE_KOREAN);

    tmapgps = new TMapGpsManager(MainActivity.this);
    tmapgps.setMinTime(1000);
    tmapgps.setMinDistance(5);
    tmapgps.setProvider(tmapgps.NETWORK_PROVIDER); //연결된 인터넷으로 현 위치를 받습니다.
    //실내일 때 유용합니다.
    //tmapgps.setProvider(tmapgps.GPS_PROVIDER); //gps로 현 위치를 잡습니다.
    tmapgps.OpenGps();

    /*  화면중심을 단말의 현재위치로 이동 */
    tmapview.setTrackingMode(true);
    tmapview.setSightVisible(true);

    // 풍선에서 우측 버튼 클릭시 할 행동입니다
    tmapview.setOnCalloutRightButtonClickListener(new TMapView.OnCalloutRightButtonClickCallback() {
        @Override
        public void onCalloutRightButton(TMapMarkerItem markerItem) {
            Toast.makeText(MainActivity.this, "클릭", Toast.LENGTH_SHORT).show();
        }
    });

}

public void addPoint() { //여기에 핀을 꼽을 포인트들을 배열에 add해주세요!
    // 강남 //
    m_mapPoint.add(new com.example.tmap_test1.MapPoint("강남", 37.510350, 127.066847));
}


public void showMarkerPoint() {// 마커 찍는거 빨간색 포인트.
    for (int i = 0; i < m_mapPoint.size(); i++) {
        TMapPoint point = new TMapPoint(m_mapPoint.get(i).getLatitude(),
                m_mapPoint.get(i).getLongitude());
        TMapMarkerItem item1 = new TMapMarkerItem();
        Bitmap bitmap = null;
        bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.poi_dot);
        //poi_dot은 지도에 꼽을 빨간 핀 이미지입니다

        item1.setTMapPoint(point);
        item1.setName(m_mapPoint.get(i).getName());
        item1.setVisible(item1.VISIBLE);

        item1.setIcon(bitmap);

        bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.poi_dot);

        // 풍선뷰 안의 항목에 글을 지정합니다.
        item1.setCalloutTitle(m_mapPoint.get(i).getName());
        item1.setCalloutSubTitle("서울");
        item1.setCanShowCallout(true);
        item1.setAutoCalloutVisible(true);

        Bitmap bitmap_i = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.i_go);

        item1.setCalloutRightButtonImage(bitmap_i);

        String strID = String.format("pmarker%d", mMarkerID++);

        tmapview.addMarkerItem(strID, item1);
        mArrayMarkerID.add(strID);
    }
}

}

0 Likes

#2

안녕하세요.

T map API운영담당자입니다.

setCompassMode(true)함수를 사용하는 중에 확대, 축소 중
지도 회전은 테스트를 통해 정상적으로 수행이 되었습니다.

다만, 클릭 및 드래그 이벤트 발생시 지도의 중심위치가
현재의 위치를 벗어나게 되는 것으로 간주가 되고 있어,
나침반 모드 해제가 이루어 집니다.

따라서, 클릭시 나침반 모드가 해제되지 않게 되는 기능은
제공해 드리고 있지 않습니다.
다만, 조금이나마 도움을 드리고자 클릭 이벤트시,
나침반 모드를 다시 true로 하신다면, 어느정도는
구현을 하실 수 있습니다.
해당 내용과 관련하여서 아래에 예시를 남겨드리겠습니다.


Ex)

tmapView.setOnClickListenerCallBack(new TMapView.OnClickListenerCallback() {

	@Override 
	public boolean onPressUpEvent(ArrayList markerlist,ArrayList poilist, TMapPoint point, PointF pointf) { 
		tmapView.setCompassMode(true); 
	} 
	    
	@Override 
	public boolean onPressEvent(ArrayList markerlist,ArrayList poilist, TMapPoint point, PointF pointf) { 
	
	} 
}); 

감사합니다.

0 Likes