2017-01-22 9 views
10

인터넷에서 다운로드 한 이미지를 주석으로 표시 할 수 없습니다. 다음 코드와 Picasso 라이브러리를 구현하려고합니다. 그러나 로컬 이미지를 사용하면 작동합니다. 모든 도움을 미리 감사드립니다.인터넷에서 다운로드 한 이미지를 주석으로 사용 - 피카소 사용

private void createAnnotation(int id, double lat, double lon, String caption, String photoUrl) { 

    SKAnnotation annotation = new SKAnnotation(id); 

    SKCoordinate coordinate = new SKCoordinate(lat, lon); 
    annotation.setLocation(coordinate); 
    annotation.setMininumZoomLevel(5); 

    SKAnnotationView annotationView = new SKAnnotationView(); 
    View customView = 
      (LinearLayout) ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
        R.layout.annotation_photo_and_text, null, false); 
    // If width and height of the view are not power of 2 the actual size of the image will be the next power of 2 of max(width,height). 
    //annotationView.setView(findViewById(R.id.customView)); 

    TextView tvCaption = (TextView) customView.findViewById(R.id.annotation_photo_caption); 
    tvCaption.setText(caption); 

    ImageView ivPhoto = (ImageView) customView.findViewById(R.id.annotation_photo); 
    Picasso.with(getApplicationContext()) 
      .load(photoUrl) 
      .resize(96, 96) 
      //.centerCrop() 
      .into(ivPhoto); 
    //ivPhoto.setImageResource(R.drawable.hurricanerain); 

    annotationView.setView(customView); 
    annotation.setAnnotationView(annotationView); 

    mapView.addAnnotation(annotation, SKAnimationSettings.ANIMATION_NONE); 
} 
+0

URL에서 다운로드 한 이미지가있는 특수 효과가있는 사람이 있습니까? – burakk

답변

0

당신은 무엇을 Target 객체를 사용하여 이미지를로드하려고 한 다음 설정 다운로드 비트 맵 귀하의 ImageView로하면?

Target target = new Target() { 
    @Override 
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
     // loading of the bitmap was a success 
     // TODO do some action with the bitmap 
     ivPhoto.setImageBitmap(bitmap); 
    } 

    @Override 
    public void onBitmapFailed(Drawable errorDrawable) { 
     // loading of the bitmap failed 
     // TODO do some action/warning/error message 
    } 

    @Override 
    public void onPrepareLoad(Drawable placeHolderDrawable) { 

    } 
}; 
ivPhoto.setTag(target); 
Picasso.with(getApplicationContext()) 
    .load(photoUrl) 
    .resize(96, 96) 
    .into(target); 
1

Picasso는 인터넷에서 이미지를 비동기 적으로로드합니다. 이미지를 다운로드 한 후 애노테이션에 이미지를 추가하십시오. 대상을 사용하여 이미지 다운로드 완료를 청취 할 수 있습니다.

ImageView ivPhoto = (ImageView) customView.findViewById(R.id.annotation_photo); 
Target target = new Target() { 
    @Override 
    public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
     ivPhoto.setImageBitmap(bitmap); 
     annotationView.setView(customView); 
     annotation.setAnnotationView(annotationView); 
     mapView.addAnnotation(annotation, SKAnimationSettings.ANIMATION_NONE); 
    } 

    @Override 
    public void onBitmapFailed(Drawable errorDrawable) {} 

    @Override 
    public void onPrepareLoad(Drawable placeHolderDrawable) {} 
}; 
ivPhoto.setTag(target); 
Picasso.with(getApplicationContext()) 
    .load(photoUrl) 
    .resize(96, 96) 
    .into(target); 
+0

ImageRequest (Volley에서)를 사용하여이 문제를 해결했습니다. 나는 코드를 테스트하지는 않았지만 코드가 작동하는 것처럼 보입니다. 고맙습니다. – burakk

+0

다른 답변을 복사하여 붙여 넣는 것은 좋은 방법이 아닙니다. – rom4ek

1

applicationcontext 대신에 활동 컨텍스트를 시도하십시오. 그것은 당신을 위해 작동 할지도 모른다.