`
antkingwei
  • 浏览: 41815 次
  • 性别: Icon_minigender_1
  • 来自: 日照
社区版块
存档分类
最新评论

goolge 地图弹出气泡

阅读更多



 新建图层

package com.android.angking.yibai;

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;

import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapView;
import com.google.android.maps.OverlayItem;
import com.google.android.maps.Projection;

public class CustomItemizedOverlay extends ItemizedOverlay<OverlayItem>{
     private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
     private Context context;
     public CustomItemizedOverlay(Context context,Drawable defaultMarker){
    	 super(boundCenterBottom(defaultMarker));
    	 this.context = context;
     }
     public void draw(Canvas canvas,MapView mapView,boolean shadow){
    	 super.draw(canvas, mapView, shadow);
    	 //Projection 接口用于屏幕像素点坐标体系和地球概况纬度点坐标体系之间的变换
    	 Projection projection = mapView.getProjection();
    	 //遍历所有的OverlayItem
    	 for(int index = this.size()-1;index>=0;index--){
    		 //获得给定索引的item
    		 OverlayItem overlayItem = getItem(index);
    		 //把经纬度变换相对于MapView左上角的屏幕像素坐标
    		 Point point = projection.toPixels(overlayItem.getPoint(), null);
    		 
    		 Paint paintText = new Paint();
    		 paintText.setColor(Color.RED);
    		 paintText.setTextSize(13);
    		 //绘制文本
    		 canvas.drawText(overlayItem.getTitle(), point.x+10, point.y-15, paintText);
    	 }
     }
     protected boolean onTap(int index){
    	 setFocus(mOverlays.get(index));
		return super.onTap(index);
    	 
     }
     public void removeAll(){
       if(mOverlays.size()>=0){
    	   mOverlays.removeAll(mOverlays);
       }
     }
     public void addOverlay(OverlayItem overlay){
    	 mOverlays.add(overlay);
    	 populate();
     }
//	public CustomItemizedOverlay(Drawable defaultMarker) {
//		super(boundCenterBottom(defaultMarker));
//		// TODO Auto-generated constructor stub
//	}

	@Override
	protected OverlayItem createItem(int i) {
		// TODO Auto-generated method stub
		return mOverlays.get(i);
	}

	@Override
	public int size() {
		// TODO Auto-generated method stub
		return mOverlays.size();
	}
	

}

 自定义OverlayItem

package com.android.yibai.antking;

import android.graphics.Bitmap;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.OverlayItem;

public class MyOverlayItem extends OverlayItem{
     private Bitmap bitmap;
	public MyOverlayItem(GeoPoint point, String title, String snippet,Bitmap bitmap) {
		super(point, title, snippet);
		this.bitmap = bitmap;
		// TODO Auto-generated constructor stub
	}
	public  Bitmap getBitmap(){
		return bitmap;
	}

}

 实现类

package com.android.yibai.antking;

import java.util.List;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.ItemizedOverlay;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.OverlayItem;

public class MapMain extends MapActivity{
	/**
	 * 地图
	 */
	protected MapView mapView;
	/**
	 * 弹出的气泡View
	 */
	private View popView;
	
	private int[] image={R.drawable.icon};
	
	 public void onCreate(Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	        
	        //初始化气泡,并设置为不可见
	        popView = View.inflate(this, R.layout.popview, null);
	        setContentView(R.layout.main);
	        
	        //获得map
	        mapView = (MapView)this.findViewById(R.id.mapview);
	        mapView.addView(popView,new MapView.LayoutParams(
	        		MapView.LayoutParams.WRAP_CONTENT,
	        		MapView.LayoutParams.WRAP_CONTENT,null
	        		,MapView.LayoutParams.BOTTOM_CENTER));
	       //这里没有给GeoPoint ,在onFoucusChangeListener中设置
	        popView.setVisibility(View.GONE);
	        /**
	         * 创建图标资料(用于显示在overlayItem所表示表记的地位
	         */
	        Drawable drawable =this.getResources().getDrawable(R.drawable.icon);
	        
	        //为mark定以地位和鸿沟
	        drawable.setBounds(0,0,drawable.getIntrinsicWidth(),
	        		drawable.getIntrinsicHeight());
	        CustomItemizedOverlay overlay = new CustomItemizedOverlay(this,drawable);
	        //设置显示/隐藏气泡的位置
	        overlay.setOnFocusChangeListener(onFocusChangeListener);
           
	        /**
	         * 创建并添加一个标志
	         */
	       GeoPoint point = new GeoPoint(35422006,119524095);
	       //创建标识
	       Bitmap bitmap = BitmapFactory.decodeResource(MapMain.this.getResources(), R.drawable.psu);
	       MyOverlayItem overlayItem = new MyOverlayItem(point
	    		   ,"银河公园","这是一个充满神奇的公园,一步一景,我去的时候有一种柳暗花明又一村的感觉",bitmap);
	       overlay.addOverlay(overlayItem);
	       /**
	        * 创建第二个标识
	        */
	       Bitmap bitmap1 = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon);
	        GeoPoint point1 = new GeoPoint((int)(22.53108*1E6),(int)(113.99151*1E6));
	       MyOverlayItem overlayItem1 = new MyOverlayItem(point1,"秀丽中华","中国最好的旅游胜地之一",bitmap1);
	       overlay.addOverlay(overlayItem1);
	       
	       //向地图里添加自定义的ItemizedOverlay
	       List<Overlay> mapOverlays =mapView.getOverlays();
	       mapOverlays.add(overlay);
	       //设置地图为卫星地图
	       mapView.setSatellite(true);
	       //设置地图可以缩放
	       mapView.setBuiltInZoomControls(true);
	       /**
	        * 取得地图管理对象,用于把握地图
	        * 
	        */
	       //设置地图的中间
	       mapView.getController().setCenter(point);
	       //设置地图默认的缩放级别
	       mapView.getController().setZoom(13);
	       
	 }
	@Override
	protected boolean isRouteDisplayed() {
		// TODO Auto-generated method stub
		return false;
	}
	private final ItemizedOverlay.OnFocusChangeListener onFocusChangeListener = new ItemizedOverlay.OnFocusChangeListener() {

		@Override
		public void onFocusChanged(ItemizedOverlay overlay, OverlayItem newFocus) {
			// TODO Auto-generated method stub
			//创建气泡窗口
			if(popView!=null){
				popView.setVisibility(View.GONE);
			}
			if(newFocus !=null){
				MapView.LayoutParams geoLp =(MapView.LayoutParams) popView
				.getLayoutParams();
				geoLp.point = newFocus.getPoint();//这行用于popView的定位
				TextView title = (TextView)popView.findViewById(R.id.map_bubbleTitle);
				title.setText(newFocus.getTitle());
				
				TextView desc = (TextView)popView.findViewById(R.id.map_bubbleText);
			    ImageView image = (ImageView)popView.findViewById(R.id.map_bubbleImage);
			    image.setImageBitmap(((MyOverlayItem) newFocus).getBitmap());
				if(newFocus.getSnippet()==null
					||newFocus.getSnippet().length()==0){
					desc.setVisibility(View.GONE);
				}else{
					desc.setVisibility(View.VISIBLE);
					desc.setText(newFocus.getSnippet());
				}
				mapView.updateViewLayout(popView,geoLp);
				popView.setVisibility(View.VISIBLE);
			}
		}
	
	
	};

}
 
  • 大小: 45.1 KB
分享到:
评论

相关推荐

    google标记多个点点击弹出气泡

    本文将详细讲解如何利用Google Maps API在地图上显示多个点,并实现点击这些点时弹出气泡展示位置信息。 首先,我们需要引入Google Maps JavaScript API。这个API是通过在HTML文件中添加一个脚本标签来引用的,URL...

    arcgis api 3.x for js 地图加载多个气泡窗口展示.zip

    这个压缩包"arcgis api 3.x for js 地图加载多个气泡窗口展示.zip"很可能包含了一系列示例代码或教程,展示了如何在地图上加载并展示多个信息气泡窗口。这些气泡窗口通常用于提供关于地图上特定位置的详细信息,如...

    谷歌地图开发实例

    气泡(Info Windows)是谷歌地图API中的另一种重要元素,它们可以在地图上为标记或地理位置提供附加信息。当你点击地图上的某个点时,一个包含文本、图片或其他HTML内容的窗口会弹出。信息窗口通常用于展示地点详情...

    Android 仿百度地图气泡程序源码.zip

    在本项目中,PopupWindow被用来创建类似百度地图气泡的弹出视图。 源码中的"PopWindow"可能是主程序实现气泡功能的核心类。这个类可能包含了以下关键部分: 1. **初始化PopupWindow**:初始化PopupWindow时,需要...

    arcgis api 3.x for js 地图加载多个气泡窗口展示源码

    arcgis api 3.x for js 地图加载多个气泡窗口展示源码,arcgis api 3.x 提供的 Popup默认只可以弹出一个,某些情况下,用户想加载弹出多个窗口,我一直看看能不能有什么途径,比如 arcgis api 3.x 拓展之类的,对其...

    android-mapviewballoons地图气泡

    而 "android-mapviewballoons" 插件则引入了更复杂的自定义视图,使得地图标记可以弹出包含详细信息的气泡,这些气泡可以是图片、文字或者更复杂的布局。 这个库的工作原理是通过覆写默认的 Marker 对象,添加了一...

    Android 仿百度地图气泡程序源码.rar

    - 气泡通常以Marker的形式出现在地图上,开发者需要创建一个自定义的MarkerView,覆盖默认的图标样式。 - 使用BitmapDescriptorFactory从资源或者网络中加载图片,设置为Marker的图标。 3. **PopupWindow实现气泡...

    js GOOGLE API地图源码

    4. **气泡提示框(InfoWindow)**:当用户点击标注或者地图上的某个点时,可以弹出包含详细信息的提示框。通过`google.maps.InfoWindow`对象实现: ```javascript var infowindow = new google.maps.InfoWindow({ ...

    Android源码——仿百度地图气泡程序源码.zip

    Android提供了多种动画API,如ObjectAnimator或ValueAnimator,可以用来控制视图的大小、位置变化,使得气泡的弹出和关闭更自然流畅。 4. **布局管理**:气泡的布局管理是另一个关键部分,因为气泡需要根据地图上的...

    谷歌地图-iOS

    本项目是一个关于在iOS上使用谷歌地图的示例,涵盖了定位、地图上的标注(气泡)显示以及自定义气泡和点击事件处理,最终实现地图导航功能。 首先,要使用谷歌地图SDK,你需要在Google Developers Console注册并...

    Android仿百度地图气泡程序源码.zip

    4. **PopupWindow**:在Android中,PopupWindow类可以用来创建弹出式窗口,常用于实现自定义气泡效果。将自定义视图添加到PopupWindow,并设置位置使其跟随Marker显示。 5. **事件监听**:为了实现气泡的点击交互,...

    谷歌MAP_V3中文详解以及一个简单例子

    谷歌地图API V3是Google提供的一套用于在网页上嵌入地图、进行地理位置处理的JavaScript接口。这个API允许开发者在自己的网站上创建交互式地图,包括但不限于定位、标记、信息窗口、路线规划等功能。本教程将对谷歌...

    Android程序研发源码Android 仿百度地图气泡程序源码.rar

    1. **Marker**:在地图上表示特定位置的图标,用户可以点击Marker来触发相应的事件,比如弹出信息窗口。源码中可能包含了创建和设置Marker的方法,如`MarkerOptions`和`addMarker()`。 2. **InfoWindow**:默认情况...

    安卓Android源码——仿百度地图气泡程序源码.zip

    在安卓开发中,有时我们需要创建类似百度地图那样的信息气泡,即在地图上显示具有自定义内容的小窗口,用户点击地图上的某个位置时,这些气泡会弹出展示详细信息。这个“安卓Android源码——仿百度地图气泡程序源码....

    Android 仿百度地图气泡程序源码-IT计算机-毕业设计.zip

    4. **PopupWindow或Dialog**:气泡通常以弹出窗口的形式出现,所以开发者可能使用了PopupWindow或者Dialog来实现这一功能。这两种UI组件的用法和特性需要熟练掌握。 5. **数据绑定和动态加载**:如果气泡中的信息...

Global site tag (gtag.js) - Google Analytics