Android PagerAdapter :: 将当前项目放入位图中

Posted

技术标签:

【中文标题】Android PagerAdapter :: 将当前项目放入位图中【英文标题】:Android PagerAdapter :: Get Current Item into bitmap 【发布时间】:2012-12-29 07:21:14 【问题描述】:

我正在为我的应用程序使用 UniversalImageLoader。我的ImageAdapter 扩展了PagerAdapter。我需要 currentImage 作为位图。通过回调方法 public void onLoadingComplete(Bitmap loadedImage) 我得到位图。但这不是当前显示的位图图像。它是下一个图像或上一个图像(取决于交换)。完整代码如下:

    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://***.com/a/8638772/913762

然后:

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

【讨论】:

【参考方案2】:

当你膨胀视图时问题就来了:它是整个列表中使用的同一个实例,所以当你的异步加载完成时,当 viewpager 尝试使用相同的 imageView 绘制不同的项目时,图像会发生变化。这是我的修复方法。

1)创建一个名为 ViewHolder 的类

class ViewHolder 
    public ImageView image;

2) 完成充气后,创建新的 ViewHolder 对象并绑定它。

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

之后,您可以像平常一样使用holder.image ImageView

希望对您有所帮助。

【讨论】:

感谢重播。我的 ImagePager 工作正常。在 imageView 上加载了确切的图像。问题是获取确切的位图。 @Override public void onLoadingComplete(Bitmap loadedImage) bitmap = loadedImage; 此函数在设置正确图像后加载下一张或上一张图像。我需要当前的 bimap 图像。 换个方法怎么样。 imageLoader.displayImage(images[position], imageView) 最新版本的UniversalImageLoader 库有displayImage 方法,只需要image linkimageview 作为参数。我已经用了一段时间了。 我正在搜索当前在位图中显示的图像。 @nostra 的解决方案奏效了。谢谢:)

以上是关于Android PagerAdapter :: 将当前项目放入位图中的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Android 的 PagerAdapter 类自动显示图像?

Android setVisibility无法在PagerAdapter中运行

Android:PagerAdapter 删除最后一个视图,因此您无法向左滑动

Android ViewPager/PagerAdapter ImageView OutOfMemoryError

android viewpager怎么使用 findviewbytag

Android开发技巧——ViewPager加View情况封装PagerAdapter的实现类