Created
July 5, 2019 04:47
-
-
Save catvinhquang/7b36ca2df7d43101434f55ca17b568a2 to your computer and use it in GitHub Desktop.
Carousel Layout
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} | |
} |
Author
catvinhquang
commented
Jul 5, 2019
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment