记录两个官方的ViewPager动画
来源:互联网 发布:数据中心网络架构 编辑:程序博客网 时间:2024/06/06 03:41
废话不多说了,直接上代码
1.这个类就是一个 ViewPager 的基本实现,然后另外加上 viewPager.setPageTransformer(); 这个方法,就可以添加切换动画了,很方便
顺便记录一下,viewPager.setOffscreenPageLimit(4); 这个方法,默认是1 ,代表预加载相邻的一个页面,就是左边一个右边一个
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager); viewPager.setAdapter(new MyPagerAdapter()); viewPager.setOffscreenPageLimit(4);// viewPager.setPageTransformer(true, new ZoomOutPageTransformer()); viewPager.setPageTransformer(true, new DepthPageTransformer()); } private class MyPagerAdapter extends PagerAdapter { private int[] images = {R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4}; @Override public int getCount() { return images.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = new ImageView(MainActivity.this); imageView.setImageResource(images[position]); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((ImageView) object); } }}
- 第一个动画文件类
public class ZoomOutPageTransformer implements ViewPager.PageTransformer { private static final float MIN_SCALE = 0.9f;//比例设置缩放 private static final float MIN_ALPHA = 1.0f; private static float defaultScale = 0.9f; //position 有三个值 -1 ,0 ,1 分别代表前一个 view 当前 view 下一个 view //一次滑动传三个 position 同时在变换,可以进行分别判断是哪个 view public void transformPage(View view, float position) { int pageWidth = view.getWidth(); int pageHeight = view.getHeight(); if (position < -1) { // [-Infinity,-1) //这页离屏幕左边有很大的距离 view.setAlpha(0); view.setScaleX(defaultScale); view.setScaleY(defaultScale); } else if (position <= 1) { // [-1,1] //修改默认的幻灯片过渡,以缩小页面 float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); float vertMargin = pageHeight * (1 - scaleFactor) / 2; float horzMargin = pageWidth * (1 - scaleFactor) / 2; if (position < 0) { view.setTranslationX(horzMargin - vertMargin / 2); } else { view.setTranslationX(-horzMargin + vertMargin / 2); } Log.e("wy____p","--- " + position); //缩小页面(在MIN_SCALE和1之间) view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); // 相对于它的大小,使页面消失。 view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1 - MIN_SCALE) * (1 - MIN_ALPHA)); } else { // This page is way off-screen to the right. 这一页离屏幕很远。 view.setAlpha(0); view.setScaleX(defaultScale); view.setScaleY(defaultScale); } }}
3.第二个动画文件类
public class DepthPageTransformer implements ViewPager.PageTransformer { private static final float MIN_SCALE = 0.75f; public void transformPage(View view, float position) { int pageWidth = view.getWidth(); if (position < -1) { // This page is way off-screen to the left. view.setAlpha(0); } else if (position <= 0) { // [-1,0] // Use the default slide transition when moving to the left page view.setAlpha(1); view.setTranslationX(0); view.setScaleX(1); view.setScaleY(1); } else if (position <= 1) { // (0,1] // Fade the page out. view.setAlpha(1 - position); // Counteract the default slide transition view.setTranslationX(pageWidth * -position); // Scale the page down (between MIN_SCALE and 1) float scaleFactor = MIN_SCALE + (1 - MIN_SCALE) * (1 - Math.abs(position)); view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); } else { // (1,+Infinity] // This page is way off-screen to the right. view.setAlpha(0); } }}
顺便说一句:第一个动画
在 viewPager 所在布局的根布局 加上这个属性:
android:clipChildren=”false”
android:clipChildren的意思:是否限制子View在其范围内,我们将其值设置为false后那么当子控件的高度高于父控件时也会完全显示,而不会被压缩
别忘了把 viewPager 的宽度设置一下 ,留出两边
就可以实现类似画廊的效果
阅读全文
0 0
- 记录两个官方的ViewPager动画
- Android官方提供的两种viewpager滑动动画
- 千变万化的ViewPager切换动画(1)--仅支持3.0以上版本的官方方法
- ViewPager的切换动画
- ViewPager的动画效果
- ViewPager的过渡动画
- ViewPager的翻页动画
- ViewPager官方的切换效果
- 设置viewpager的动画效果
- ViewPager动画的实现原理
- ViewPager实现的切换动画
- Android ViewPager的动画效果
- ViewPager 的切换动画效果
- ViewPager的动画切换效果
- ViewPager切换动画的方法
- ViewPager之onPageScrolled的动画
- ViewPager的使用简单记录
- ViewPager动画
- 银行家算法
- 精妙SQL语句
- kafka性能监控之KafkaMetrics Sensor
- vs秘钥
- opencv 实现PNG的透明背景
- 记录两个官方的ViewPager动画
- 查看import的类是出自哪个jar包的方法
- 2017.12.8
- C# Stream 和 byte[] 之间的转换
- C# 重绘设置Image亮度
- C# 去掉List重复元素的方法
- 百度指数
- (三)证明不等式|(e-(1+1/n)^n)|<3/n
- Linux彩色进度条和普通进度条