하나. 문제 설명
사용자가 확대/축소 제스처, 팬 제스처, 기울이기 제스처 및 회전 제스처를 통해 지도와 상호 작용하고 지도를 제어하여 가시 영역을 이동하고 변경할 때 Huawei Map SDK는 사용자 제스처 유형을 직접 가져오기 위한 API를 제공하지 않습니다. .
둘. 해결책
- Huawei Maps SDK의 맵 카메라는 위치, 방향, 기울기 각도 및 줌 레벨과 같은 모든 카메라 위치 매개변수를 포함하는 CameraPosition 클래스를 제공합니다. 자세한 내용은 다음 그림을 참조하십시오.
-
Huawei Maps SDK는 지도 카메라 움직임 모니터링 이벤트도 제공합니다.애플리케이션 계층은 지도 카메라가 움직이기 시작하고 움직임을 멈추는 것과 같은 이벤트와 같은 지도 카메라의 움직임 상태를 수신하도록 리스너를 설정할 수 있습니다.
-
사용자와 지도 간의 상호 작용 제스처를 판단하려면 지도 카메라가 움직이기 시작할 때 대상, 방위, 기울기 및 확대/축소의 초기 값을 청취 이벤트에 기록할 수 있습니다. 맵 카메라 이동 종료 리스닝 이벤트에서 타겟, 방위, 틸트, 줌의 최종 값을 다시 획득합니다.
-
타겟, 방위, 기울기, 확대/축소의 초기 및 최종 값이 변경되었는지 여부를 계산하여 사용자와 지도 간의 상호 작용 제스처 유형을 결정합니다.
삼. 코드 예제 및 효과 표시
- 지도 인스턴스를 만들고 지도 카메라 이동에 대한 수신 이벤트를 구현합니다.
활동의 레이아웃 파일에 지도 컨트롤을 추가하고 지도 속성을 설정합니다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/mapfragment_camera_gesturetype"
class="com.huawei.hms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraTargetLat="48.893478"
map:cameraTargetLng="2.334595"
map:cameraZoom="10" />
</androidx.constraintlayout.widget.ConstraintLayout>
b.Activity에서 SDK를 초기화하고 지도를 불러온 후 지도 카메라의 리스닝 이벤트를 구현합니다.
public class HwMapCameraGestureTypeActivity extends AppCompatActivity implements OnMapReadyCallback,
HuaweiMap.OnCameraMoveStartedListener, HuaweiMap.OnCameraMoveListener, HuaweiMap.OnCameraIdleListener {
public static String LOG_TAG_MAP = "HW_MAP_LOG";
private SupportMapFragment mSupportMapFragment;
//HuaweiMap对象
private HuaweiMap huaweiMap;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 初始化SDK
MapsInitializer.initialize(this);
setContentView(R.layout.activity_hwmap_camera_gesturetype);
//加载地图
mSupportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.mapfragment_camera_gesturetype);
mSupportMapFragment.getMapAsync(this);
}
//地图初始化成功的回调方法
@Override
public void onMapReady(HuaweiMap huaweiMap) {
this.huaweiMap = huaweiMap;
//设置地图相机的移动侦听事件
this.huaweiMap.setOnCameraMoveStartedListener(this);
this.huaweiMap.setOnCameraMoveListener(this);
this.huaweiMap.setOnCameraIdleListener(this);
}
//地图相机开始移动的回调
@Override
public void onCameraMoveStarted(int i) {
Log.w(LOG_TAG_MAP, "地图相机开始移动");
}
//地图相机移动过程中的回调
@Override
public void onCameraMove() {
}
//地图相机移动结束的回调
@Override
public void onCameraIdle() {
Log.w(LOG_TAG_MAP, "地图相机结束移动");
}
}
c.아래 Gif에서 볼 수 있듯이 맵 카메라가 움직이기 시작하고 움직임이 끝나면 해당 로그가 출력됩니다.
- 새로운 initZoomValue, initTiltValue, initBearingValue 객체를 생성하여 지도 카메라가 움직일 때 초기 속성 값을 기록하고 onCameraMoveStarted(int i) 수신 방법에서 새로 생성된 객체에 값을 할당합니다.
/**
* 初始值对象
* initZoomValue-屏幕中心附近的缩放级别初始值。
* initTiltValue-相机角度与垂直于地球表面的线的夹角初始值。
* initBearingValue-相机指向的方向初始值。
*/
private float initZoomValue, initTiltValue, initBearingValue;
//地图相机开始移动的回调
@Override
public void onCameraMoveStarted(int i) {
Log.w(LOG_TAG_MAP, "地图相机开始移动");
if (null != huaweiMap && null != huaweiMap.getCameraPosition()) {
//记录相机移动时的相机各个属性的初始值
initZoomValue = huaweiMap.getCameraPosition().zoom;
initTiltValue = huaweiMap.getCameraPosition().tilt;
initBearingValue = huaweiMap.getCameraPosition().bearing;
}
}
- onCameraIdle() 메서드에서 지도 카메라와의 사용자 상호 작용 유형을 계산합니다.
//地图相机移动结束的回调
@Override
public void onCameraIdle() {
//计算用户与相机的交互手势类型
if (null != huaweiMap && null != huaweiMap.getCameraPosition()) {
//通过计算zoom的值是否发生变化 判断用户与地图交互类型是平移还是旋转
if (initZoomValue != huaweiMap.getCameraPosition().zoom) {
Log.w(LOG_TAG_MAP, "地图相机结束移动,移动类型为:缩放");
} else {
Log.w(LOG_TAG_MAP, "地图相机结束移动,移动类型为:平移");
}
//通过计算Tilt的值是否发生变化 判断用户与地图交互类型是否是倾斜手势
if (initTiltValue != huaweiMap.getCameraPosition().tilt) {
Log.w(LOG_TAG_MAP, "地图相机结束移动,移动类型为:倾斜");
}
//通过计算Bearing的值是否发生变化 判断用户与地图交互类型是否是旋转手势
if (initBearingValue != huaweiMap.getCameraPosition().bearing) {
Log.w(LOG_TAG_MAP, "地图相机结束移动,移动类型为:旋转");
}
}
}
- 아래의 Gif 사진을 통해 특정 효과를 볼 수 있습니다.
a. 이동 및 확대/축소 제스처 유형:
b. 회전 제스처 유형:
C. 기울이기 제스처 유형:
넷. 참조
자세히 알아보기>>
Map Service Alliance의 공식 웹 사이트를 방문하십시오.
HMS Core Alliance의 공식 웹 사이트를 방문하십시오 .
팔로우하고 처음으로 HMS Core의 최신 기술 정보를 알아보세요~