2014-02-06 5 views
12

저는 최신 universal-image-loader-1.9.2-SNAPSHOT-with-sources.jar 파일을 사용하고 있습니다. 잘 작동합니다. 이미지를 원 (원)으로 변경하고 싶습니다. 다음과 같은 표시 옵션을 사용했습니다.유니버설 이미지 로더 roundedBitmapDisplayer 문제

   DisplayImageOptions userimgoptions = new DisplayImageOptions.Builder() 
          .displayer(new RoundedBitmapDisplayer(35)) 
          .showImageOnLoading(android.R.color.transparent) 
          .showImageForEmptyUri(R.drawable.picture_info_profile_img) 
          .showImageOnFail(R.drawable.picture_info_profile_img) 
          .cacheInMemory(true).cacheOnDisc(true) 
          .bitmapConfig(Bitmap.Config.RGB_565).build(); 

일부 이미지는 작동하지 않습니다. 나는 저해상도와 고해상도로 이것을 시험해 보았다.

참고 : 내 xml Imageview 높이 및 (55 * 55). enter image description here enter image description hereenter image description here

enter image description here 친절 방법이 문제를 해결하는 방법 좀 도와주세요. 나는이 문제를 해결할 수 없다.

덕분에,

+0

해당 라이브러리에는 반올림 된 비트 맵 디스플레이를 제공하는 속성이 있습니다. 확인해 봤어? – Piyush

답변

17

당신은 당신이 .displayer(new RoundedBitmapDisplayer(25)) 나를 위해 일한 .displayer(new RoundedBitmapDisplayer(1000))에 변경할 수 있습니다 원형 이미지를합니다. 당신이 둥근 이미지를 원하는 경우

+0

도 나를 위해 작동합니다.감사. –

+0

설정 이미지보기 너비 (너비 = 높이) 나를 위해 일했습니다. – Raviprakash

+0

저에게도 감사합니다 – Nicky

10

당신은 귀하의 경우 1/2 55

DisplayImageOptions userimgoptions = new DisplayImageOptions.Builder() 
         .displayer(new RoundedBitmapDisplayer((int) 27.5f)) 
         .showImageOnLoading(android.R.color.transparent) 
         .showImageForEmptyUri(R.drawable.picture_info_profile_img) 
         .showImageOnFail(R.drawable.picture_info_profile_img) 
         .cacheInMemory(true).cacheOnDisc(true) 
         .bitmapConfig(Bitmap.Config.RGB_565).build(); 

27.5 인 이미지의 반경에 둥근 비트 맵 디스플레이 어를 설정해야하지만, 아마에 좋은 생각이 아니다 하드 코드, 비트 맵을 실제로 얻고 너비를 계산할 때 구성을 변경합니다.

+0

API에서 120 * 120 픽셀을 얻고 있습니다. 모든 이미지는 동일한 크기가 될 것입니다. –

+0

반올림 된 비트 맵 디스플레이 어를 60으로 설정합니다. 원형 이미지를 원하는 경우 테두리 크기는 단지 반지름이 될 것입니다. – Brian

6

RoundedBitmpDisplayer가 최근의 재 작성에서도 상당히 느리다는 것을 알았습니다. 둥근 모서리를 일관성있게 얻는 가장 빠른 방법은 RoundedImageView를 사용하는 것입니다. https://github.com/vinc3m1/RoundedImageView 당신은 그 뷰를 UIL에 전달할 수 있고 뷰는 당신을 위해 모서리를 반올림 처리합니다. 원하는 반지름을 지정하면됩니다.

4

kingargyle 으로RoundedImageView이 가장 좋은 방법입니다 이용하여 상기와 그냥 이렇게하면 당신이 원하는 것을 얻을 수 있습니다

Transformation transformation = new RoundedTransformationBuilder() 
      .borderColor(Color.BLACK) 
      .borderWidthDp(3) 
      .cornerRadiusDp(30) 
      .oval(false) 
      .build(); 

Picasso.with(context) 
    .load(url) 
    .fit() 
    .transform(transformation) 
    .into(imageView); 

그래서, 당신은 캐시 옵션을 많이 costumize 필요가없는 경우, 유니버설 이미지 로더 대신 피카소을 사용하여 RoundedImageView을 사용하는 것이 가장 좋습니다.

+0

'그 iRadiusDp'에 공백이 있어야하나요? 그것은 방법을 해결할 수 없다는 말입니다. –

+1

@PatMyron 메서드는 cornerRadiusDp입니다. 왜 내가 "iRadiusDp"를 썼는지 기억하지 마십시오. – GuilhE

1

Tim의 솔루션은 훌륭하지만 내 경우에는 이미지가 커지면 이미지가 더 커지며 이미지는 원보다 타원형입니다.

public class CircleBitmapDisplayer extends RoundedBitmapDisplayer { 


public CircleBitmapDisplayer() { 
    super(0); 
} 

@Override 
public void display(Bitmap bitmap, ImageAware imageAware, LoadedFrom loadedFrom) { 
    if (!(imageAware instanceof ImageViewAware)) { 
     throw new IllegalArgumentException("ImageAware should wrap ImageView. ImageViewAware is expected."); 
    } 

    imageAware.setImageDrawable(new CircleDrawable(bitmap, margin)); 
} 

public static class CircleDrawable extends RoundedDrawable { 

    private Bitmap mBitmap; 

    public CircleDrawable(Bitmap bitmap, int margin) { 
     super(bitmap, 0, margin); 
     this.mBitmap = bitmap; 
    } 

    @Override 
    public void draw(Canvas canvas) { 
     int radius = 0; 
     if(mBitmap.getWidth() > mBitmap.getHeight()) { 
      radius = mBitmap.getHeight()/2; 
     }else { 
      radius = mBitmap.getWidth()/2; 
     } 
     canvas.drawRoundRect(mRect, radius, radius, paint); 
    } 
} 
} 

는 일반 디스플레이 어로 사용 :이 코드를 시도 , 그것은 모든 이미지의 크기와 함께 작동

함께

DisplayImageOptions options = new DisplayImageOptions.Builder() 
        .displayer(new CircleBitmapDisplayer()) 
        .cacheInMemory(true) 
        .cacheOnDisk(true) 
        .build(); 
ImageLoader.getInstance().displayImage(url, imageView,options); 
+0

는 매력처럼 작동합니다.) thanks –

0

사용 .displayer(new CircleBitmapDisplayer()) DisplayImageOptions에서와

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5' 

모듈 레벨 build.gradle.

관련 문제