2012-09-09 3 views
0

내지도 오버레이에 마커 (항목)를 추가하고 싶습니다. 제 마커가 ImageView 레이아웃으로 설정되어 있습니다. 그것은 9 패치 png를 배경으로하고 사용자의 Facebook 프로필 사진을 src로 가지고 있습니다.android google maps 동적 마커

내 문제는 내가 게으른 프로필 사진을 다운로드한다는 것입니다. 아직로드되지 않은 경우 src에 임시 이미지를 넣고 AsyncTask를 던져 Facebook에서 프로필 사진을 다운로드합니다. 사진 다운로드가 완료되었습니다. 마커에 넣고 싶습니다.

어떻게 할 수 있습니까? 모든 메서드에서 마커는 드로어 블을 객체로 가져옵니다 ...

아마도 LayerDrawable과 관련이 있습니까?

답변

0

오버레이 클래스

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; 
     } 
    } 


} 

drawble 아래와 같이한다/marker.xml는

<item 
    android:id="@+id/frame" 
    android:drawable="@drawable/pa3_map_people_img1"/> 
<item 
    android:id="@+id/photo" 
    android:drawable="@drawable/pa3_map_people_img1"/> 

아래와 같이한다