2015-01-14 2 views
1

fit() 및 resize()를 사용하면 이미지를 다운로드하기 전에 크기가 작아진다는 것을 알고 있습니다. 그러나 listView가 사용되고 이미지의 비율이 변하는 경우 imageView의 layout_width 및 layout_height를 wrap_content로 설정 한 다음 transform()을 사용하여 이미지 뷰를 이미지 뷰에 배치하기 전에 이미지의 비율을 결정해야합니다.이미지를 다운로드하기 전에 Picasso의 fit(), resize() 및 transform() 크기가 조정됩니까?

예 :

 Picasso.with(mContext).load(region.getImage_url()).transform(new Transformation() { 
      @Override 
      public Bitmap transform(Bitmap source) { 
       int targetWidth = getContext().getSharedPreferences(Constants.PREFERENCES, Context.MODE_PRIVATE).getInt(Constants.DEVICE_WIDTH, 0); 
       double aspectRatio = (double) source.getHeight()/(double) source.getWidth(); 
       int targetHeight = (int) (holder.targetWidth * aspectRatio); 
       Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false); 
       if (result != source) { 
        // Same bitmap is returned if sizes are the same 
        source.recycle(); 
       } 
       return result; 
      } 

      @Override 
      public String key() { 
       return "transformation" + " desiredWidth"; 
      } 
     }).into(holder.imageView); 

내 문제는 Picasso의 변형 방법도 이미지를 다운로드하기 전에 축소하는 것입니까? 그렇지 않다면, listview의 imageViews에 고정 비율을 설정하지 않으면 서 가장 좋은 접근 방법은 무엇입니까?

+1

** 이미지를 다운로드하기 전에 ** 이미지 크기를 줄이시겠습니까? – Harry

+0

네, 그게 내가 원하는거야. 또는 나는 어떤 실수를 했는가? 나는 주된 목표는 이미지의 로딩을 효율적으로 만드는 것이다. – Derekyy

+0

아니요, 제가 말씀 드렸습니다. 효율적인 대역폭 사용을 위해 많은 노력을 기울였습니다. 도움이된다면 내 대답을 볼 수 있습니다. – Harry

답변

3

필자도 Picasso와 함께 작업하며 나의 대답은 "아니오"입니다. 이미지는 항상 이고, 그 다음에는 항상 크기가 변경/변환 된 다음으로 표시됩니다.

축소 된 크기 (ListView에 표시됨)를 다운로드하는 유일한 방법은의 작은 크기 또는 축소판 버전을 제공하는 입니다. 자신의 서버에서 이미지를 호스팅하는 경우 쉽게 달성 할 수 있습니다.

2

Thumbor 서비스를 사용하면 다운로드하기 전에 이미지를 자르고 크기를 조정할 수 있습니다. Square에는 멋진 Java 클라이언트가 있습니다 (Pollexor). 그리고 Pollexor를위한 특별한 Picasso RequestTransformer. 즉, 모든 전처리 과정이 백엔드로 추출됩니다.

+0

제안을위한 Thx입니다. 그러나 백엔드는 고객의 손에 달려 있습니다. 나는 그를 그렇게 할 수 없다고 생각합니다. 어쨌든, Thx. 미래에 나를 도울 수 있습니다. – Derekyy

+0

@Derekyy Glad, 그것은 어떤면에서 유용했습니다. – colriot

관련 문제