給ViewPager添加一些炫酷的動畫,viewpager添加炫酷

來源:互聯網
上載者:User

給ViewPager添加一些炫酷的動畫,viewpager添加炫酷
ViewPagerWithAnimations

給viewPager的添加上動畫效果,並且使之相容API11以下的版本

重寫ViewPager類
public class MyViewPager extends ViewGroup {...      public void setPageTransformer(boolean reverseDrawingOrder, ViewPager.PageTransformer transformer) {//        if (Build.VERSION.SDK_INT >= 11) {            final boolean hasTransformer = transformer != null;            final boolean needsPopulate = hasTransformer != (mPageTransformer != null);            mPageTransformer = transformer;            setChildrenDrawingOrderEnabledCompat(hasTransformer);            if (hasTransformer) {                mDrawingOrder = reverseDrawingOrder ? DRAW_ORDER_REVERSE : DRAW_ORDER_FORWARD;            } else {                mDrawingOrder = DRAW_ORDER_DEFAULT;            }            if (needsPopulate) populate();//        }    }...}
XML Layout
<com.zhengsonglan.viewpagerwithanimations.UI.MyViewPager        android:id="@+id/main_viewpager"        android:layout_width="match_parent"        android:layout_height="match_parent"/>
編寫動畫動畫1
public class ZoomOutPageTransformer implements ViewPager.PageTransformer {    private static final float MIN_SCALE = 0.85f;    private static final float MIN_ALPHA = 0.5f;    public void transformPage(View view, float position) {        int width = view.getWidth();        int pageWidth = width;        int pageHeight = view.getHeight();        if (position < -1) { // [-Infinity,-1)            // This page is way off-screen to the left.            ViewHelper.setAlpha(view, 0);        } else if (position <= 1) { // [-1,1]            // Modify the default slide transition to shrink the page as well            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) {                float result1=horzMargin-vertMargin/2;                ViewHelper.setTranslationX(view,result1);            } else {                float result2=-horzMargin + vertMargin / 2;                ViewHelper.setTranslationY(view,result2);            }            // Scale the page down (between MIN_SCALE and 1)            ViewHelper.setScaleX(view,scaleFactor);            ViewHelper.setScaleY(view,scaleFactor);            ViewHelper.setAlpha(view,MIN_ALPHA +                    (scaleFactor - MIN_SCALE) /                            (1 - MIN_SCALE) * (1 - MIN_ALPHA));        } else { // (1,+Infinity]            // This page is way off-screen to the right.            ViewHelper.setAlpha(view,0);        }    }}
效果

動畫2
/** * Created by zsl on 2015/2/25. * 動畫2 */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.            ViewHelper.setAlpha(view,0);        } else if (position <= 0) { // [-1,0]            // Use the default slide transition when moving to the left page            ViewHelper.setAlpha(view,1);            ViewHelper.setTranslationX(view,0);            ViewHelper.setScaleX(view,1);            ViewHelper.setScaleY(view,1);        } else if (position <= 1) { // (0,1]            // Fade the page out.            ViewHelper.setAlpha(view,1-position);            // Counteract the default slide transition            ViewHelper.setTranslationX(view,pageWidth * -position);            // Scale the page down (between MIN_SCALE and 1)            float scaleFactor = MIN_SCALE                    + (1 - MIN_SCALE) * (1 - Math.abs(position));            ViewHelper.setScaleX(view,scaleFactor);            ViewHelper.setScaleY(view,scaleFactor);        } else { // (1,+Infinity]            // This page is way off-screen to the right.            ViewHelper.setAlpha(view,0);        }    }}
效果

動畫3
/** * Created by zsl on 2015/2/25. * 動畫3 */public class Animation3Transformer implements ViewPager.PageTransformer {    private static final float MAX_ROATE = 20f;    public void transformPage(View view, float position) {        int width = view.getWidth();        int pageWidth = width;        int pageHeight = view.getHeight();        if (position < -1) { // [-Infinity,-1)            ViewHelper.setRotation(view,0);        } else if (position <= 1) { // [-1,1]            float result=position*MAX_ROATE;            ViewHelper.setPivotX(view,pageWidth*0.5f);            ViewHelper.setPivotY(view,pageHeight);            ViewHelper.setRotation(view,result);        } else { // (1,+Infinity]            ViewHelper.setRotation(view,0);        }    }}
效果

動畫4
/** * Created by zsl on 2015/2/25. * 動畫4 */public class Animation4Transformer implements ViewPager.PageTransformer {    private static final float MAX_ROATE = 360f;    public void transformPage(View view, float position) {        int width = view.getWidth();        int pageWidth = width;        int pageHeight = view.getHeight();        if (position < -1) { // [-Infinity,-1)            ViewHelper.setRotation(view,0);            ViewHelper.setAlpha(view,1);        } else if (position <= 1) { // [-1,1]            float result=position*MAX_ROATE;            //旋轉            ViewHelper.setPivotX(view,pageWidth*0.5f);            ViewHelper.setPivotY(view, pageHeight*0.5f);            ViewHelper.setRotation(view,result);            //透明度            ViewHelper.setAlpha(view,1-Math.abs(position));            //縮放            ViewHelper.setScaleY(view,1-Math.abs(position));            ViewHelper.setScaleX(view,1-Math.abs(position));        } else { // (1,+Infinity]            ViewHelper.setRotation(view,0);            ViewHelper.setAlpha(view,1);        }    }
效果

Thanks for

1.JakeWharton : NineOldAndroids

2.Google : Using ViewPager for Screen Slides

Developed By
  • zsl - <1300326388@qq.com>
源碼地址

ViewPagerWithAnimations
歡迎Star

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.