Skip to content

Instantly share code, notes, and snippets.

@thuytrinh
Last active September 21, 2020 01:22
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 10 You must be signed in to fork a gist
  • Save thuytrinh/3999404 to your computer and use it in GitHub Desktop.
Save thuytrinh/3999404 to your computer and use it in GitHub Desktop.
Create carousel view with ViewPager
package com.thuytrinh.cardselectordemo;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.app.Activity;
public class MainActivity extends Activity implements OnPageChangeListener {
private ViewPager mCardsViewPager;
private float MIN_SCALE = 1f - 1f / 7f;
private float MAX_SCALE = 1f;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCardsViewPager = (ViewPager) findViewById(R.id.viewpager_cards);
mCardsViewPager.setAdapter(new CardsPagerAdapter());
mCardsViewPager.setPageMargin(-156);
mCardsViewPager.setOffscreenPageLimit(3);
mCardsViewPager.setOnPageChangeListener(this);
}
private class CardsPagerAdapter extends PagerAdapter {
private boolean mIsDefaultItemSelected = false;
private int[] mCards = {
R.drawable.chrysanthemum,
R.drawable.desert,
R.drawable.hydrangeas,
R.drawable.jellyfish,
R.drawable.koala,
R.drawable.lighthouse,
R.drawable.penguins,
R.drawable.tulips };
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView cardImageView = (ImageView) View.inflate(container.getContext(), R.layout.imageview_card, null);
cardImageView.setImageDrawable(getResources().getDrawable(mCards[position]));
cardImageView.setTag(position);
if (!mIsDefaultItemSelected) {
cardImageView.setScaleX(MAX_SCALE);
cardImageView.setScaleY(MAX_SCALE);
mIsDefaultItemSelected = true;
} else {
cardImageView.setScaleX(MIN_SCALE);
cardImageView.setScaleY(MIN_SCALE);
}
container.addView(cardImageView);
return cardImageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public int getCount() {
return mCards.length;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
for (int i = 0; i < mCardsViewPager.getChildCount(); i++) {
View cardView = mCardsViewPager.getChildAt(i);
int itemPosition = (Integer) cardView.getTag();
if (itemPosition == position) {
cardView.setScaleX(MAX_SCALE - positionOffset / 7f);
cardView.setScaleY(MAX_SCALE - positionOffset / 7f);
}
if (itemPosition == (position + 1)) {
cardView.setScaleX(MIN_SCALE + positionOffset / 7f);
cardView.setScaleY(MIN_SCALE + positionOffset / 7f);
}
}
}
@Override
public void onPageSelected(int position) {
}
}
@duncandee
Copy link

You should probably name the file MainActivity.java

@mubashirmeddekar
Copy link

can you please share me imageview_card file. I need to check how it works? Thanks,

@thuytrinh
Copy link
Author

The workaround above was deprecated in favour of PageTransformer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment