JAZZYVIEWPAGER(用开源项目JazzyViewPager实现ViewPager切换动画[亲测有效])

发布时间:2025-12-10 19:28:08 浏览次数:6

用开源项目JazzyViewPager实现ViewPager切换动画[亲测有效]-jazzyviewpagerCOM

用开源项目JazzyViewPager实现ViewPager切换动画[亲测有效]JazzyViewPager这个项目可以让viewpager有各种绚丽的动画,而且还可以自由扩展。但从官网下载的lib导入时会出现找不到视图的问题,不知道是不是我人品不行,所以我就自己写了lib。总之,本篇就是来讲这些可以有华丽动画的viewpager。JazzyViewPager项目地址:ht..

  JazzyViewPager这个项目可以让viewpager有各种绚丽的动画,而且还可以自由扩展。但从官网下载的lib导入时会出现找不到视图的问题,不知道是不是我人品不行,所以我就自己写了lib。总之,本篇就是来讲这些可以有华丽动画的viewpager。

JazzyViewPager项目地址:https://github.com/jfeinstein10/JazzyViewPager

一、布局文件

像viewpager一样,直接写一个控件即可。

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"     android:background="#00ff00">    <com.jfeinstein.jazzyviewpager.JazzyViewPager        xmlns:app="http://schemas.android.com/apk/res-auto"        android:        android:layout_width="match_parent"        android:layout_height="match_parent" >    </com.jfeinstein.jazzyviewpager.JazzyViewPager></LinearLayout>

【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

它里面还有很多属性可以定义的,像上面的可以用app这个命名空间来定义属性。下面是各种属性,基本就是各种动画,和淡入淡出效果

fadeEnable:是否有淡入淡出效果

outLineEnable:viewpager一个视图周边是否有边框

outLineColor:边框颜色

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="JazzyViewPager">        <attr name="style">            <enum name="standard" value="0" />            <enum name="tablet" value="1" />            <enum name="cubein" value="2" />            <enum name="cubeout" value="3" />            <enum name="flipvertical" value="4" />            <enum name="fliphorizontal" value="5" />            <enum name="stack" value="6" />            <enum name="zoomin" value="7" />            <enum name="zoomout" value="8" />            <enum name="rotateup" value="9" />            <enum name="rotatedown" value="10" />            <enum name="accordion" value="11" />        </attr>        <attr name="fadeEnabled" format="boolean" />        <attr name="outlineEnabled" format="boolean" />        <attr name="outlineColor" format="color|reference" />    </declare-styleable></resources> 

二、java代码实现

2.1首先看看它有什么动画效果,至于各种动画是什么样的,自己去试试吧~

我们当然可以继续扩展动画,下面就扩展一个动画。

一、先定义一个动画名字,这里叫test

public enum TransitionEffect { Standard, Tablet, CubeIn, CubeOut, FlipVertical, FlipHorizontal, Stack, ZoomIn, ZoomOut, RotateUp, RotateDown, Accordion, Test;}

二、写实现方式

protected void animateTest(View left, View right, float positionOffset) { if (mState != State.IDLE) { if (left != null) { //此处增加具体动画  } if (right != null) { //此处增加具体动画实现   } } }

这里举一个源码中table的例子

 protected void animateTablet(View left, View right, float positionOffset) { if (mState != State.IDLE) { if (left != null) { manageLayer(left, true); mRot = 30.0f * positionOffset; mTrans = getOffsetXForRotation(mRot, left.getMeasuredWidth(), left.getMeasuredHeight()); ViewHelper.setPivotX(left, left.getMeasuredWidth()/2); ViewHelper.setPivotY(left, left.getMeasuredHeight()/2); ViewHelper.setTranslationX(left, mTrans); ViewHelper.setRotationY(left, mRot); logState(left, "Left"); } if (right != null) { manageLayer(right, true); mRot = -30.0f * (1-positionOffset); mTrans = getOffsetXForRotation(mRot, right.getMeasuredWidth(), right.getMeasuredHeight()); ViewHelper.setPivotX(right, right.getMeasuredWidth()*0.5f); ViewHelper.setPivotY(right, right.getMeasuredHeight()*0.5f); ViewHelper.setTranslationX(right, mTrans); ViewHelper.setRotationY(right, mRot); logState(right, "Right"); } } }

三、添加实现代码到设置项中

@Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if (mState == State.IDLE && positionOffset > 0) { oldPage = getCurrentItem(); mState = position == oldPage ? State.GOING_RIGHT : State.GOING_LEFT; } boolean goingRight = position == oldPage; if (mState == State.GOING_RIGHT && !goingRight) mState = State.GOING_LEFT; else if (mState == State.GOING_LEFT && goingRight) mState = State.GOING_RIGHT; float effectOffset = isSmall(positionOffset) ? 0 : positionOffset; // mLeft = getChildAt(position); // mRight = getChildAt(position+1); mLeft = findViewFromObject(position); mRight = findViewFromObject(position+1); if (mFadeEnabled) animateFade(mLeft, mRight, effectOffset); if (mOutlineEnabled) animateOutline(mLeft, mRight); switch (mEffect) { case Standard: break; case Tablet: animateTablet(mLeft, mRight, effectOffset); break; case CubeIn: animateCube(mLeft, mRight, effectOffset, true); break; case CubeOut: animateCube(mLeft, mRight, effectOffset, false); break; case FlipVertical: animateFlipVertical(mLeft, mRight, positionOffset, positionOffsetPixels); break; case FlipHorizontal: animateFlipHorizontal(mLeft, mRight, effectOffset, positionOffsetPixels); case Stack: animateStack(mLeft, mRight, effectOffset, positionOffsetPixels); break; case ZoomIn: animateZoom(mLeft, mRight, effectOffset, true); break; case ZoomOut: animateZoom(mLeft, mRight, effectOffset, false); break; case RotateUp: animateRotate(mLeft, mRight, effectOffset, true); break; case RotateDown: animateRotate(mLeft, mRight, effectOffset, false); break; case Accordion: animateAccordion(mLeft, mRight, effectOffset); break; case Test: 
  animateTest(mLeft, mRight, effectOffset);
break; } super.onPageScrolled(position, positionOffset, positionOffsetPixels); if (effectOffset == 0) { disableHardwareLayer(); mState = State.IDLE; } }

原理和思路讲解:http://blog.csdn.net/lmj623565791/article/details/38026503

源码下载:http://download.csdn.net/detail/shark0017/8070139

参考自:http://blog.csdn.net/t12x3456/article/details/13290349

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477