2014-12-03 3 views
0

유니버설 이미지 로더 (UIL)를 사용하여 목록보기에서 이미지를 캐시하고 표시합니다.Android/Universal Image Loader : 이미지가 표시되지 않습니다.

이 나는 ​​이미지의 설명 위의 이미지를 표시 할 목록보기의 항목

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    > 

     <ImageView 
      android:id="@+id/image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
     /> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
     /> 
</LinearLayout> 

에 대해 다음과 레이아웃으로 표시 이미지를 만들 수 없습니다. 이미지의 너비는 기기의 전체 너비이며 이미지의 너비는 이미지의 너비에 따라 자동으로 조정됩니다.

너비와 높이 모두 "wrap_content"를 사용하면 UIL을 사용하지 않는 다른 프로젝트에 내 이미지를 표시 할 수 있습니다. 나는 내가 UIL의 구성에서 무엇을 잘못했는지 확신하지 못한다. (나는 Github의 예제에서 동일한 구성을 사용한다.) 그러나 위의 레이아웃으로 이미지를 표시하지는 않는다. 사실 0 높이로 표시됩니다. 고정 된 높이를 제공하면 표시 할 수 있습니다.

<ImageView 
     android:id="@+id/image" 
     android:layout_width="wrap_content" 
     android:layout_height="300dp" 
    /> 

해결 방법이 있으면 알려주십시오.

답변

1

이미지보기 (onLoadingComplete)에 첨부 된 후 비트 맵의 ​​크기에 따라 이미지보기의 너비와 높이를 수동으로 업데이트 할 수있었습니다. 또한 장치를 회전 할 때 이미지의 크기가 새 화면 크기에 맞게 다시 계산됩니다.

이 솔루션을 개선하기위한 제안이 있으시면 다른 솔루션이 있다면 의견을 말하십시오. 감사!

내가 문제를 해결 한
private static class AnimateFirstDisplayListener extends SimpleImageLoadingListener { 

    static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>()); 

    @Override 
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
     if (loadedImage != null) { 
      ImageView imageView = (ImageView) view; 
      boolean firstDisplay = !displayedImages.contains(imageUri); 
      if (firstDisplay) { 
       FadeInBitmapDisplayer.animate(imageView, 500); 
       displayedImages.add(imageUri); 
      } 

      // Screen's width will be the width of the image. 
      float newWidth = Resources.getSystem().getDisplayMetrics().widthPixels; 

      // Get the width and the height of the image. 
      int oldWidth = imageView.getDrawable().getIntrinsicWidth(); 
      int oldHeight = imageView.getDrawable().getIntrinsicHeight(); 

      // Calculate the new height of the image based on the screen's width. 
      float newHeight = newWidth * oldHeight/oldWidth; 

      // Apply the new width and height values to ImageView. 
      imageView.getLayoutParams().width = (int) newWidth; 
      imageView.getLayoutParams().height = (int) newHeight; 
     } 
    } 
} 
0

, 그냥이처럼 수행하려고 :

ImageLoader.getInstance().displayImage(mImageUrl, mImageView, PhotoUtils.avatarImageOptions,new SimpleImageLoadingListener() { 
     @Override 
     public void onLoadingStarted(String imageUri, View view) { 
      progressBar.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
      String message = null; 
      switch (failReason.getType()) { 
       case IO_ERROR: 

        break; 
       case DECODING_ERROR: 

        break; 
       case NETWORK_DENIED: 

        break; 
       case OUT_OF_MEMORY: 

        break; 
       case UNKNOWN: 

        break; 
      } 
      Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show(); 
      progressBar.setVisibility(View.GONE); 
     } 

     @Override 
     public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 

      progressBar.setVisibility(View.GONE); 
      mAttacher.update(); 
     } 
    }); 
관련 문제