高德地图根据缩放比例添加和隐藏文字标注

在网上查了很多,都是添加Marker的方法,几乎没有关于添加Text文字标注的,其实跟添加Text文字标注差别不大,下面来看看:

一、简单添加Text

aMap.addText(
					new TextOptions()
						.position(new LatLng(39.13455,112.456891))//位置
						.text("我添加的Text")                    //文字内容
						.backgroundColor(Color.alpha(0))        //背景颜色
						.fontSize(35)                            //字体大小
						.fontColor(Color.parseColor("#878787"))    //文字颜色
				);

二、根据屏幕内Marker的位置添加对应Marker位置的地域名称,根据不同的缩放比例来显示或者移除Text,先说思路:

1.添加AMap.OnCameraChangeListener,这个是在改变地图状态的时候调用的,每一次拖动或者缩放地图的时候都会调用。

2.定义一个List集合来盛放屏幕内所有的Text对象。

3.获取屏幕内所有的Marker对象,在根据Marker的位置标记Text,并将所有的Text放到List集合中返回给第二步的List

4.在AMap.OnCameraChangeListener的回调方法中判断地图的缩放比例来设置Text的显示和回收。

代码实现:这里我只放出实现的代码,至于显示地图添加Marker可以参照网上

public class MainMapActivity extends BaseAMapAct implements
		AMap.OnInfoWindowClickListener,
		AMap.OnMapClickListener,
		View.OnClickListener,
		AMap.OnCameraChangeListener{

    private List screenTextList = null;//当前屏幕的Text 

    @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main_map);
        ...
        aMap.setOnCameraChangeListener(this);
        ...
}

...
@Override
	public void onCameraChange(CameraPosition cameraPosition) {

	}

//拖动地图时当缩放比例小于20的时候显示Text大于20就removeText
	@Override
	public void onCameraChangeFinish(CameraPosition cameraPosition) {
            //获取当前屏幕的Marker
		List screenMarkers = aMap.getMapScreenMarkers();

		if (aMap.getScalePerPixel() < 10){		//在缩放比例小于10的时候显示Text
			System.out.println( "获取的比例:" + aMap.getScalePerPixel());
			isShowTextPlace = true;
			//删除之前添加的点
			if (screenTextList != null && screenTextList.size() > 0){
				MapUtil.removeScreenText(screenTextList);
				screenTextList.clear();
			}
			screenTextList = MapUtil.getScreenText(aMap,screenMarkers,isShowTextPlace);
		}else {
			//删除之前添加的点
			if (screenTextList != null && screenTextList.size() > 0){
				MapUtil.removeScreenText(screenTextList);
				screenTextList.clear();
			}
		}

	}
}

接下来是实现添加和回收的功能

public class MapUtil {

	//Text获取与添加
	public static List getScreenText(AMap aMap,List screenMarks,boolean isshow){
		List textList = new ArrayList<>();
		int size = screenMarks.size();
		for (int i = 0;i < size; i++){
			textList.add(addScreenMarkersText(aMap,screenMarks.get(i)));
		}
		return textList;
	}
        //在地图上添加Text
	public static Text addScreenMarkersText(AMap aMap,Marker screenMark){
			return aMap.addText(
					new TextOptions()
						.position(screenMark.getPosition())
						.text(screenMark.getTitle())
						.backgroundColor(Color.alpha(0))
						.fontSize(35)
						.fontColor(Color.parseColor("#878787"))
				);

	}
	//Text的回收
	public static void removeScreenText(List screenTestList){
		int size = screenTestList.size();
		for (int i = 0; i < size; i++){
			screenTestList.get(i).remove();
		}
	}
}

好了,就这样简单,希望能帮到大家,互相学习。

你可能感兴趣的:(android)