android谷歌地图动态标记
我想将标记(项目)添加到我的地图覆盖图中。 我的问题是我的标记设置为ImageView布局。 它有一个9补丁png作为背景,用户的Facebook个人资料图片为src 我的问题是我懒得下载个人资料图片。如果它还没有加载,我会在src中放置一个临时图像,然后从Facebook下载个人资料图片。 下载完图片后,我想把它放在标记中 我怎么做?在所有方法中,标记器都会获取一个可绘制的对象android谷歌地图动态标记,android,google-maps,Android,Google Maps,我想将标记(项目)添加到我的地图覆盖图中。 我的问题是我的标记设置为ImageView布局。 它有一个9补丁png作为背景,用户的Facebook个人资料图片为src 我的问题是我懒得下载个人资料图片。如果它还没有加载,我会在src中放置一个临时图像,然后从Facebook下载个人资料图片。 下载完图片后,我想把它放在标记中 我怎么做?在所有方法中,标记器都会获取一个可绘制的对象 也许与LayerDrawable有关?覆盖类应该如下所示 public class MapItemOverlay e
也许与LayerDrawable有关?覆盖类应该如下所示
public class MapItemOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
private Context mContext;
private JSONArray marrJson;
private JSONObject mjsonObj;
public MapItemOverlay(Drawable defaultMarker, JSONArray arrJson,
Context context) {
super(boundCenterBottom(defaultMarker));
marrJson = arrJson;
mContext = context;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(final int i) {
OverlayItem result = mOverlays.get(i);
LayerDrawable marker = (LayerDrawable) mContext.getResources()
.getDrawable(R.drawable.marker);
GetFBImageTask task = new GetFBImageTask(i, marker, result);
task.execute(new Void[] {});
result.setMarker(boundCenter(marker));
return result;
}
@Override
public int size() {
return mOverlays.size();
}
public MapItemOverlay(Drawable defaultMarker, Context context) {
super(boundCenterBottom(defaultMarker));
mContext = context;
}
@Override
protected boolean onTap(int index) {
return true;
}
public class GetFBImageTask extends AsyncTask<Void, Void, LayerDrawable> {
private LayerDrawable marker;
private OverlayItem result;
private int index;
public GetFBImageTask(int i, LayerDrawable Mmarker, OverlayItem result1) {
marker = Mmarker;
result = result1;
index = i;
}
@Override
protected void onPostExecute(LayerDrawable bmp) {
super.onPostExecute(bmp);
if (bmp != null) {
result.setMarker(boundCenter(bmp));
}
}
@Override
protected LayerDrawable doInBackground(Void... p) {
try {
Bitmap bmp = null;
String[] params = new String[2];
params[0] = "http://your image url";
params[1] = your image name;
URL ulrn = new URL(params[0]);
HttpURLConnection con = (HttpURLConnection) ulrn
.openConnection();
InputStream is = con.getInputStream();
bmp = BitmapFactory.decodeStream(is);
if (null != bmp) {
if (params[1] != null) {
OutputStream fOut = null;
File file = new File(Preference.ImagePath, params[1] + ".jpg");
if (!file.exists()) {
fOut = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG,90, fOut);
fOut.flush();
fOut.close();
}
}
}
if (bmp != null) {
Drawable photo = new BitmapDrawable(
mContext.getResources(), bmp);
marker.setDrawableByLayerId(
R.id.frame,
mContext.getResources().getDrawable(
R.drawable.pa3_map_people_img1));
marker.setDrawableByLayerId(R.id.photo, photo);
marker.setLayerInset(1, 4, 4, 4, 11);
return marker;
}
} catch (Exception e) {
}
return null;
}
}
}
公共类MapItemOverlay扩展了ItemizeOverlay{
private ArrayList mOverlays=new ArrayList();
私有上下文;
私人JSONArray marrJson;
私人JSONObject mjsonObj;
公共MapItemOverlay(可绘制的defaultMarker、JSONArray、arrJson、,
上下文(上下文){
super(boundCenterBottom(defaultMarker));
marrJson=arrJson;
mContext=上下文;
}
公共void addOverlay(OverlayItem overlay){
添加(覆盖);
填充();
}
@凌驾
受保护的OverlayItem createItem(最终int i){
OverlayItem result=mOverlays.get(i);
LayerDrawable标记=(LayerDrawable)mContext.getResources()
.getDrawable(R.drawable.marker);
GetFBImageTask任务=新建GetFBImageTask(i、标记、结果);
task.execute(新的Void[]{});
结果:设置标记(边界中心(标记));
返回结果;
}
@凌驾
公共整数大小(){
返回mOverlays.size();
}
公共MapItemOverlay(可绘制的默认标记,上下文){
super(boundCenterBottom(defaultMarker));
mContext=上下文;
}
@凌驾
受保护的布尔onTap(整数索引){
返回true;
}
公共类GetFBImageTask扩展了AsyncTask{
私有层可绘制标记;
私有覆盖项结果;
私有整数索引;
公共GetFBImageTask(int i、LayerDrawable Mmarker、OverlayItem result1){
标记器=标记器;
结果=结果1;
指数=i;
}
@凌驾
PostExecute上受保护的void(LayerDrawable bmp){
super.onPostExecute(bmp);
如果(bmp!=null){
结果:setMarker(边界中心(bmp));
}
}
@凌驾
受保护层可绘制背景(空白…p){
试一试{
位图bmp=null;
字符串[]参数=新字符串[2];
参数[0]=”http://your 图像url”;
params[1]=您的图像名称;
URL ulrn=新URL(参数[0]);
HttpURLConnection con=(HttpURLConnection)ulrn
.openConnection();
InputStream=con.getInputStream();
bmp=位图工厂.decodeStream(is);
如果(null!=bmp){
如果(参数[1]!=null){
OutputStream fOut=null;
File File=新文件(Preference.ImagePath,params[1]+“.jpg”);
如果(!file.exists()){
fOut=新文件输出流(文件);
压缩(Bitmap.CompressFormat.PNG,90,fOut);
fOut.flush();
fOut.close();
}
}
}
如果(bmp!=null){
可绘制照片=新位图可绘制(
mContext.getResources(),bmp);
marker.setDrawableByLayerId(
R.id.frame,
mContext.getResources().getDrawable(
R.drawable.pa3(地图、人物);
marker.setDrawableByLayerId(R.id.photo,photo);
标记。SetLayerSet(1,4,4,11);
返回标记;
}
}捕获(例外e){
}
返回null;
}
}
}
drawble/marker.xml应该如下所示
public class MapItemOverlay extends ItemizedOverlay<OverlayItem> {
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
private Context mContext;
private JSONArray marrJson;
private JSONObject mjsonObj;
public MapItemOverlay(Drawable defaultMarker, JSONArray arrJson,
Context context) {
super(boundCenterBottom(defaultMarker));
marrJson = arrJson;
mContext = context;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(final int i) {
OverlayItem result = mOverlays.get(i);
LayerDrawable marker = (LayerDrawable) mContext.getResources()
.getDrawable(R.drawable.marker);
GetFBImageTask task = new GetFBImageTask(i, marker, result);
task.execute(new Void[] {});
result.setMarker(boundCenter(marker));
return result;
}
@Override
public int size() {
return mOverlays.size();
}
public MapItemOverlay(Drawable defaultMarker, Context context) {
super(boundCenterBottom(defaultMarker));
mContext = context;
}
@Override
protected boolean onTap(int index) {
return true;
}
public class GetFBImageTask extends AsyncTask<Void, Void, LayerDrawable> {
private LayerDrawable marker;
private OverlayItem result;
private int index;
public GetFBImageTask(int i, LayerDrawable Mmarker, OverlayItem result1) {
marker = Mmarker;
result = result1;
index = i;
}
@Override
protected void onPostExecute(LayerDrawable bmp) {
super.onPostExecute(bmp);
if (bmp != null) {
result.setMarker(boundCenter(bmp));
}
}
@Override
protected LayerDrawable doInBackground(Void... p) {
try {
Bitmap bmp = null;
String[] params = new String[2];
params[0] = "http://your image url";
params[1] = your image name;
URL ulrn = new URL(params[0]);
HttpURLConnection con = (HttpURLConnection) ulrn
.openConnection();
InputStream is = con.getInputStream();
bmp = BitmapFactory.decodeStream(is);
if (null != bmp) {
if (params[1] != null) {
OutputStream fOut = null;
File file = new File(Preference.ImagePath, params[1] + ".jpg");
if (!file.exists()) {
fOut = new FileOutputStream(file);
bmp.compress(Bitmap.CompressFormat.PNG,90, fOut);
fOut.flush();
fOut.close();
}
}
}
if (bmp != null) {
Drawable photo = new BitmapDrawable(
mContext.getResources(), bmp);
marker.setDrawableByLayerId(
R.id.frame,
mContext.getResources().getDrawable(
R.drawable.pa3_map_people_img1));
marker.setDrawableByLayerId(R.id.photo, photo);
marker.setLayerInset(1, 4, 4, 4, 11);
return marker;
}
} catch (Exception e) {
}
return null;
}
}
}