2012-12-29 3 views
1

내 응용 프로그램에 UniversalImageLoader를 사용하고 있습니다. 내 ImageAdaptePagerAdapter입니다. currentImage가 Bitmap으로 필요합니다. 콜백 메도우 public void onLoadingComplete(Bitmap loadedImage) 나는 비트 맵을 얻고있다. 그러나 그것은 현재 보여주는 비트 맵 이미지가 아닙니다. 다음 이미지 또는 이전 이미지 (스와핑에 따라 다름)입니다. 전체 코드는 다음과 같습니다.Android PagerAdapter :: 현재 항목을 비트 맵으로 가져 오기

private class ImagePagerAdapter extends PagerAdapter { 
    private String[] images; 
    private LayoutInflater inflater; 

    ImagePagerAdapter(String[] images) { 
     this.images = images; 
     inflater = getLayoutInflater(); 
    } 

    @Override 
    public void destroyItem(View container, int position, Object object) { 
     ((ViewPager) container).removeView((View) object); 
    } 

    @Override 
    public void finishUpdate(View container) { 
    } 

    @Override 
    public int getCount() { 
     return images.length; 
    } 

    @Override 
    public Object instantiateItem(View view, int position) { 
     if (view != null) { 
      final View imageLayout = inflater.inflate(
        R.layout.item_pager_image, null); 
      final ImageView imageView = (ImageView) imageLayout 
        .findViewById(R.id.image_item_pager); 

      imageLoader.displayImage(images[position], imageView, options, 
        new ImageLoadingListener() { 

         @Override 
         public void onLoadingStarted() { 
         } 

         @Override 
         public void onLoadingFailed(FailReason failReason) { 
          //On Loading Failed Logic        
         } 

         @Override 
         public void onLoadingComplete(Bitmap loadedImage) { 
                 bitmap = loadedImage; 
          imgViewSetAsWp.setImageBitmap(bitmap); 
         } 

         @Override 
         public void onLoadingCancelled() { 
          // Do nothing 
         } 
        }); 


      ((ViewPager) view).addView(imageLayout, 0); 

      return imageLayout; 
     } else 
      return view; 
    } 

    @Override 
    //Other override methood of ImagePager 

} 

올바른 비트 맵을 얻는 방법이 있습니까?

답변

1

- 다음 https://stackoverflow.com/a/8638772/913762

과 : 재생을위한

View currentView = ... 
ImageView currentImageView = (ImageView) currentView.findViewById(...); 
BitmapDrawable bd = (BitmapDrawable) currentImageView.getDrawable(); 
Bitmap bmp = bd.getBitmap(); 
+0

그것이 효과. 감사 :) – ratulalahy

0

보기를 확장하면 문제가 발생합니다. 목록 전체에서 사용되는 동일한 단일 인스턴스이므로 비동기로드가 완료되면 뷰 페이지가 동일한 imageView를 사용하여 다른 항목을 칠하려고 할 때 이미지가 변경됩니다 . 여기 내 수정 방법입니다.

1) 최대한 빨리 팽창 완료로) ViewHolder

class ViewHolder { 
    public ImageView image; 
} 

2라는 클래스를 만들고, 새로운 ViewHolder 객체를 생성하고 바인딩합니다.

ViewHolder holder = new ViewHolder(); 
holder.image = (ImageView) imageLayout.findViewById(R.id.image_item_pager); 

그 후, 당신은 정상 ImageViewholder.image를 사용할 수 있습니다.

희망 도움말.

현재보기하는 방법을
+0

감사합니다. 내 ImagePager 제대로 작동합니다. imageView에서 정확한 이미지가로드됩니다. 문제가 정확한 비트 맵을 얻는 중입니다. @Override public void onLoadingComplete (Bitmap loadedImage) { bitmap = loadedImage; }'이 함수는 올바른 이미지를 설정 한 후 다음 또는 이전 이미지를로드합니다. 나는 현재의 bimap 이미지가 필요하다. – ratulalahy

+0

방법 변경 방법. 'imageLoader.displayImage (images [position], imageView)' – Hein

+0

는 이해할 수 없습니다. 설명해 주시겠습니까? – ratulalahy