Skip to content

Instantly share code, notes, and snippets.

@catvinhquang
Created July 5, 2019 04:47
Show Gist options
  • Save catvinhquang/7b36ca2df7d43101434f55ca17b568a2 to your computer and use it in GitHub Desktop.
Save catvinhquang/7b36ca2df7d43101434f55ca17b568a2 to your computer and use it in GitHub Desktop.
Carousel Layout
package catvinhquang.androiddeveloper;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
public class MainActivity extends Activity {
public final static float SCALE = 0.7f;
public final static float DIFF_SCALE = 1 - SCALE;
private int screenWidth;
private int screenHeight;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DisplayMetrics dm = getResources().getDisplayMetrics();
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
final ViewPager root = new ViewPager(this);
root.setPageMargin(-screenWidth / 2);
root.setOffscreenPageLimit(3);
root.setAdapter(new PhotoAdapter());
root.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (positionOffset >= 0f && positionOffset <= 1f) {
View cur = root.findViewById(position);
View next = root.findViewById(position + 1);
if (cur != null && next != null) {
cur.setScaleX(1 - DIFF_SCALE * positionOffset);
cur.setScaleY(1 - DIFF_SCALE * positionOffset);
next.setScaleX(SCALE + DIFF_SCALE * positionOffset);
next.setScaleY(SCALE + DIFF_SCALE * positionOffset);
}
}
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
setContentView(root);
}
class PhotoAdapter extends PagerAdapter {
private int[] images = new int[]{R.drawable.image1, R.drawable.image2,
R.drawable.image3, R.drawable.image4,
R.drawable.image5, R.drawable.image6,
R.drawable.image7, R.drawable.image8,
R.drawable.image9, R.drawable.image10};
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
Context c = container.getContext();
FrameLayout root = new FrameLayout(c);
root.setId(position);
root.setScaleX(MainActivity.SCALE);
root.setScaleY(MainActivity.SCALE);
ImageView iv = new ImageView(c);
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(screenWidth / 2, screenHeight / 2);
lp.gravity = Gravity.CENTER;
iv.setLayoutParams(lp);
iv.setImageResource(images[position]);
root.addView(iv);
container.addView(root);
return root;
}
@Override
public int getCount() {
return images.length;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}
}
@catvinhquang
Copy link
Author

image

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