Search code examples
androidandroid-viewpager

Display full image without cutting it in the ViewPager - how to fix that?


I want to display a full image without cut height/width on android.support.v4.view.ViewPager, but when a set image in ImagePagerAdapter adapter the image crops from both sides in my image gallery.

Please help me: how to display a full image in the viewer?

TOTAL_IMAGE=mAllImages.length-1;
viewpager=(ViewPager)findViewById(R.id.image_slider);
handler=new Handler();

ImagePagerAdapter adapter = new ImagePagerAdapter();
viewpager.setAdapter(adapter);
viewpager.setCurrentItem(position);

layout file

<include
    android:id="@+id/toolbar"
    layout="@layout/toolbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<android.support.v4.view.ViewPager
    android:id="@+id/image_slider"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_below="@+id/toolbar"
    >
</android.support.v4.view.ViewPager>

Java class

int position;
String[] mAllImages,mAllImageCatName,mAllItemId,mAllImageCatDate;

public DatabaseHandler db;
ImageView vp_imageview;
ViewPager viewpager;
int TOTAL_IMAGE;
private SensorManager sensorManager;
private boolean checkImage = false;
private long lastUpdate;
Handler handler;
Runnable Update;
boolean Play_Flag=false;
private Menu menu;
private DatabaseHandler.DatabaseManager dbManager;
String  Image_catName,Image_Url,Image_Date;
Bitmap bgr;
DisplayImageOptions options;

Toolbar toolbar;

@Override
public void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.image_slider);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    db = new DatabaseHandler(this);
    dbManager = DatabaseHandler.DatabaseManager.INSTANCE;
    dbManager.init(getApplicationContext());

    options = new DisplayImageOptions.Builder()
    .showImageForEmptyUri(R.drawable.ic_launcher)
    .showImageOnFail(R.drawable.ic_launcher)
    .resetViewBeforeLoading(true)
    .cacheOnDisc(true)
    .imageScaleType(ImageScaleType.EXACTLY)
    .bitmapConfig(Bitmap.Config.RGB_565)
    .considerExifParams(true)
    .displayer(new FadeInBitmapDisplayer(300))
    .build();

    Intent i=getIntent();
    position=i.getIntExtra("POSITION_ID", 0);
    mAllImages=i.getStringArrayExtra("IMAGE_ARRAY");
    mAllImageCatName=i.getStringArrayExtra("IMAGE_CATNAME");
    mAllImageCatDate=i.getStringArrayExtra("IMAGE_CATDATE");
    mAllItemId=i.getStringArrayExtra("ITEMID");


    TOTAL_IMAGE=mAllImages.length-1;
    viewpager=(ViewPager)findViewById(R.id.image_slider);
    handler=new Handler();

     ImagePagerAdapter adapter = new ImagePagerAdapter();
     viewpager.setAdapter(adapter);
     viewpager.setCurrentItem(position);

     sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
     lastUpdate = System.currentTimeMillis();

     viewpager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            // TODO Auto-generated method stub

            position=viewpager.getCurrentItem();
            Image_Url=mAllImages[position];

            List<Pojo> pojolist=db.getFavRow(Image_Url);
            if(pojolist.size()==0)
            {
                 menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.ic_star_outline));
            }
            else
            {
                if(pojolist.get(0).getImageurl().equals(Image_Url))
                {
                     menu.getItem(0).setIcon(getResources().getDrawable(R.drawable.ic_star_white));
                }

            }

        }

ImageAdapter class

private class ImagePagerAdapter extends PagerAdapter {

    private LayoutInflater inflater;

    public ImagePagerAdapter() {
        // TODO Auto-generated constructor stub

        inflater = getLayoutInflater();
    }

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

    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view.equals(object);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        View imageLayout = inflater.inflate(R.layout.viewpager_item, container, false);
        assert imageLayout != null;
        ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image);
        TextView txt1 = (TextView) imageLayout.findViewById(R.id.txt1);
        TextView txt2 = (TextView) imageLayout.findViewById(R.id.txt2);

        final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
         txt1.setText(mAllImageCatName[position]);
        txt2.setText(mAllImageCatDate[position]);
         ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(getApplicationContext()));
         ImageLoader.getInstance().displayImage(Constant.SERVER_IMAGE_DETAILS+mAllImages[position], imageView, options, new SimpleImageLoadingListener() {
                @Override
                public void onLoadingStarted(String imageUri, View view) {
                    spinner.setVisibility(View.VISIBLE);
                }

                @Override
                public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                    String message = null;
                    switch (failReason.getType()) {
                        case IO_ERROR:
                            message = "Input/Output error";
                            break;
                        case DECODING_ERROR:
                            message = "Image can't be decoded";
                            break;
                        case NETWORK_DENIED:
                            message = "Downloads are denied";
                            break;
                        case OUT_OF_MEMORY:
                            message = "Out Of Memory error";
                            break;
                        case UNKNOWN:
                            message = "Unknown error";
                            break;
                    }
                    Toast.makeText(SlideImageActivity.this, message, Toast.LENGTH_SHORT).show();

                    spinner.setVisibility(View.GONE);
                }

                @Override
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                    spinner.setVisibility(View.GONE);
                }
            });

        container.addView(imageLayout, 0);
        return imageLayout;

    }

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

Solution

  • In your adapter item set imageview scaletype to fitxy for fitting

    android:scaleType="fitXY"

    or you can set scale type programmatically also:

         ImageView image = findviewbyId(R.id.image);
         image.setScaleType(ImageView.ScaleType.FITXY);
    

    You can also check another scale type: CenterCrop, CenterInside etc.