2013-04-22 3 views
9

새로운 Google Map v2 API를 개발 중입니다.Android GoogleMap 2 유니버설 이미지 로더를 통해 InfoWindow에서 ImageView로 정보를 동적으로 업데이트합니다.

저는 ImageLoader를 사용하여 마커에서 이미지를 동적으로 표시했습니다.

하지만 문제는 유니버설 이미지 로더의 onLoadingComplete()가있을 때 ImageView가 자동 또는 수동으로 무효화되지 않는 것입니다.

다음 번에 동일한 마커를 클릭하면 캐시가 유니버설 이미지 로더에서 표시됩니다.

private class CustomInfoWindowAdapter implements InfoWindowAdapter { 

    @Override 
    public View getInfoContents(Marker marker) { 
     return null; 
    } 

    @Override 
    public View getInfoWindow(Marker marker) { 
     final View mWindow = getLayoutInflater().inflate(R.layout.custom_info_window, null); 

     render(marker, mWindow); 
     return mWindow; 
    } 

    private void render(final Marker marker, View view) { 

     final String url = markers.get(marker.getId()).getStrProfilePic(); 
     final ImageView image = ((ImageView) view.findViewById(R.id.badge)); 
     Log.e(TAG, "URL : " + url); 

     if (url != null && !url.equalsIgnoreCase("null") 
       && !url.equalsIgnoreCase("")) { 
      imageLoader.displayImage(url, image, options, new SimpleImageLoadingListener() { 
       @Override 
       public void onLoadingComplete(String imageUri, View view, 
         Bitmap loadedImage) { 
        super.onLoadingComplete(imageUri, view, loadedImage); 
        ((ImageView) view).invalidate(); 
       } 
      }); 
     } else { 
      image.setImageResource(R.drawable.noimage); 
     } 

     final String title = marker.getTitle(); 
     final TextView titleUi = ((TextView) view.findViewById(R.id.title)); 
     if (title != null) { 
      titleUi.setText(title); 
     } else { 
      titleUi.setText(""); 
     } 

     final String snippet = marker.getSnippet(); 
     final TextView snippetUi = ((TextView) view.findViewById(R.id.snippet)); 
     if (snippet != null) { 
      snippetUi.setText(snippet); 
     } else { 
      snippetUi.setText(""); 
     } 
    } 
} 

나는 마커를 해시에 저장 마커 ID를 추가 :

다음은 내 CustomInfoWindowAdapter 코드입니다. 그리고 그들로부터 나는 사진의 URL을 얻을 것이다.

+0

표시 옵션 :

나는 이미지 뷰를 업데이트하려면 다음과 같이 내 클래스를 정의했다? 구성? UI 스레드에서'displayImage (...) '를 호출합니까? – NOSTRA

+0

render (최종 마커보기 뷰)에서 imageLoader.displayImage (....) 메서드를 호출했습니다. –

답변

9

.

private class CustomInfoWindowAdapter implements InfoWindowAdapter { 

    private View view; 

    public CustomInfoWindowAdapter() { 
     view = getLayoutInflater().inflate(R.layout.custom_info_window, null);   
    } 

    @Override 
    public View getInfoContents(Marker marker) { 

     if (YourClassName.this.marker != null && 
       ClassName.this.marker.isInfoWindowShown()) { 
      YourClassName.this.marker.hideInfoWindow(); 
      YourClassName.this.marker.showInfoWindow(); 
     } 
     return null; 
    } 

    @Override 
    public View getInfoWindow(final Marker marker) { 
     YourClassName.this.marker = marker; 

     final String url = markers.get(marker.getId()).getStrProfilePic(); 
     final ImageView image = ((ImageView) view.findViewById(R.id.badge)); 

     if (url != null && !url.equalsIgnoreCase("null") 
       && !url.equalsIgnoreCase("")) { 
      imageLoader.displayImage(url, image, options, new SimpleImageLoadingListener() { 
       @Override 
       public void onLoadingComplete(String imageUri, View view, 
         Bitmap loadedImage) { 
        super.onLoadingComplete(imageUri, view, loadedImage); 
        getInfoContents(marker); 
       } 
      }); 
     } else { 
      image.setImageResource(R.drawable.noimage); 
     } 

     final String title = marker.getTitle(); 
     final TextView titleUi = ((TextView) view.findViewById(R.id.title)); 
     if (title != null) { 
      titleUi.setText(title); 
     } else { 
      titleUi.setText(""); 
     } 

     final String snippet = marker.getSnippet(); 
     final TextView snippetUi = ((TextView) view.findViewById(R.id.snippet)); 
     if (snippet != null) { 
      snippetUi.setText(snippet); 
     } else { 
      snippetUi.setText(""); 
     } 

     return view; 
    } 
} 

Check the Example

+0

- 하나의 애플리케이션에 여러지도를 표시 할 수 있습니까? –

+0

내 응용 프로그램에서는 여러 맵을 표시하지 않습니다. 그러나 Map2에서는 여러 개의지도를 표시 할 수 있습니다. 데모는 Google Play 서비스로 Android SDK에서 사용할 수 있습니다. –

+1

답장은 @NishantShah +1입니다. 만약 당신이 코멘트보다 귀하의 블로그 URL을 게시하는 것보다 그것은 전체 예제 :) http://androidfreakers.blogspot.in/ 감사합니다 :) –

3

정보창에서 반환 된보기 콜백은 나중에 업데이트 할 수 없습니다. 이 제안은 다음

시도 : 나는 클래스 수준에 하나 개의 마커 객체를 촬영하고 마커 정보를 업데이트 해당 개체를 사용했다 Dynamic contents in Maps V2 InfoWindow