ViewPager添加动画效果

    xiaoxiao2025-08-04  17

    ViewPager 添加Page之间的切换效果 其实只需要设置 /** * 第一个参数是布尔类型的 表示在页面切换产生动画效果的时候是否要翻转一下,让下一个页面在上一个页面的底下 * 因为ViewPager默认下一个页面是绘制在上一个页面的上面,这里一般传入true */ mViewPager.setPageTransformer(true,new DepthPageTransformer());

    这里介绍两个官方提供的切换效果:

    public class ZoomOutPageTransformer implements ViewPager.PageTransformer { /** * 最小缩放比例 */ private static final float MIN_SCALE=0.85f; /** * 最小透明度 */ private static final float MIN_ALPHA=0.5f; /** * 第二个参数position并不是引导页面的position * 表明一个给定页面相对于屏幕中心的位置,position是相对于屏幕左边缘的 * 如果当前页面刚好占满整个屏幕,那么position就是0; * 如果一个页面刚才屏幕右边缘划出来,那么整个页面的position就为1 * 如果某个时刻我们把页面1向左滑动一半,导致屏幕中央既有一半页面1也有一半页面二 * 那么页面一的position就是-0.5,页面二的position就是0.5 * @param view * @param position */ @Override public void transformPage(View view, float position) { /** * 获取控件的的宽度 */ int pageWidth=view.getWidth(); /** * 获取控件的高度 */ int pageHeight=view.getHeight(); Log.i("TGA","pageWidth========"+pageWidth+"=====pageHeight====="+pageHeight); /** * 如果页面完全从左侧划出就隐藏掉 */ if(position<-1){ view.setAlpha(0); }else if(position <=1){ /** * 缩放比例 */ float scaleFactor =Math.max(MIN_SCALE,1-Math.abs(position)); Log.i("TGA","scaleFactor========"+scaleFactor); /** * 外边距 */ float vertMargin=pageHeight*(1-scaleFactor)/2; float horzMargin=pageWidth*(1-scaleFactor)/2; Log.i("TGA","vertMargin========"+vertMargin+"=====horzMargin====="+horzMargin); if(position<0){ view.setTranslationX(horzMargin-vertMargin/2); }else { view.setTranslationX(-horzMargin+vertMargin/2); } view.setScaleX(scaleFactor); view.setScaleY(scaleFactor); view.setAlpha(MIN_ALPHA+(scaleFactor-MIN_SCALE)/(1-MIN_SCALE)*(1-MIN_ALPHA)); }else { view.setAlpha(0); } } }

    第二种:

    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) { // [-Infinity,-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); } } }
    转载请注明原文地址: https://ju.6miu.com/read-1301394.html
    最新回复(0)