Search code examples
androidimageandroid-viewpagerandroid-glide

ImageView fullscreen in Activity


I have a GridView populated with images. When I click on a GridView item it should open a new Activity and show an image in full screen, but it doesn't happen.

I'm using the Glide library. I've tried to debug, but I didn't find the problem.

Any ideas?

Gallery.java

  gridViewGallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {


                Intent intent = new Intent(AdvertisementGallery.this,FullScreenImage.class);
                intent.putExtra("image",i);

                startActivity(intent);

            }
        });

FullScreenImage.java

 viewPager.clearFocus();


        imageItems = Constants.items;


        bitmap = getIntent().getExtras().getInt("image");


        //   ImagePageAdapter imagePageAdapter = new ImagePageAdapter(this,imageItems);
        imagePageAdapter = new ImageAdapter(this,imageItems);
        viewPager.setAdapter(imagePageAdapter);

        viewPager.setCurrentItem(bitmap,false);

class ImageAdapter extends PagerAdapter {

    public Context context;
    public ArrayList data = new ArrayList();

    public ImageAdapter(Context context, ArrayList data){

        this.context = context;
        this.data = data;

    }
    @Override
    public int getCount() {
        return this.data.size();

    }

    @Override
    public int getItemPosition(Object object) {
        int position = data.indexOf(object);
        return  POSITION_NONE ;

    }

    @Override
    public boolean isViewFromObject(View view, Object object)
    {
        return view == ((LinearLayout) object);

    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View row = null;


        if (row == null) {
            LayoutInflater inflater = ((Activity) context).getLayoutInflater();
            row = inflater.inflate(R.layout.image_pager_item_list_layout, container, false);

            //  holder.imageTitle = (TextView) row.findViewById(R.id.text);
            image = (TouchImageView) row.findViewById(R.id.imgDisplay);
            row.setTag(image);
        } else {
            image = (ImageView) row.getTag();
        }

        ImageItem item = (ImageItem) data.get(position);

       Glide.with(getApplicationContext())
                .load(item.getImage())
               .into(image);

        container.addView(row);

        return row;

    }

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


    }
}

Solution

  • First of all, you are passing the position of the image. you need to pass the item. instead of position. you need to do following changes in the following way.

    in Gallery.java

     gridViewGallery.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
    
                ImageItem item = (ImageItem) data.get(position)
    
                Intent intent = new Intent(AdvertisementGallery.this,FullScreenImage.class);
                //intent.putExtra("image",i);
                intent.putExtra("imagePosition",i);
    
                startActivity(intent);
    
            }
        });
    

    Now, Retrieve your image in FullScreenImage.java by following way.

    imageItems = Constants.items;
    
    int position=getIntent().getExtras().getInt("imagePosition");
    ImageItem item = imageItems.get(position);
    bitmap = item.getImage();
    

    To set in your ViewPager you can follow this code:

    imagePageAdapter = new ImageAdapter(this,imageItems);
    viewPager.setAdapter(imagePageAdapter);
    viewPager.setCurrentItem(position, true);
    

    And for the issue of

    some time image display and some time is not display in viewpager.

    Try to add following line .placeholder (new ColorDrawable (Color.WHITE)). so the code looks like :

    Glide.with(getApplicationContext())
                .load(item.getImage())
                .placeholder (new ColorDrawable (Color.WHITE))
               .into(image);
    

    And, If you are getting issue only in release mode apk then try this solution