近期项目中有一个需求,要实现多账户的切换功能,每一个账户是一个界面,两个fragment实现翻滚切换的效果:
如图所示:
废话不多说,直接贴代码,很简单:
1.
public class FlipHorizontalTransformer extends TransformAdapter {
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
public void onTransform(View view, float position) {
float rotation = 180f * position;
view.setTranslationX(view.getWidth() * -position);
view.setAlpha(rotation > 90f || rotation < -90f ? 0 : 1);
view.setPivotX(view.getWidth() * 0.5f);
view.setPivotY(view.getHeight() * 0.5f);
view.setRotationY(rotation);
if (position > -0.5f && position < 0.5f) {
view.setVisibility(View.VISIBLE);
} else {
view.setVisibility(View.INVISIBLE);
}
}
}
2.
public class TransformUtil {
public static void reverse(ViewPager viewPager, ViewPager.PageTransformer transformer) {
if (viewPager != null) {
viewPager.setPageTransformer(true, transformer);
}
}
public static void forward(ViewPager viewPager, ViewPager.PageTransformer transformer) {
if (viewPager != null) {
viewPager.setPageTransformer(false, transformer);
}
}
}
public abstract class TransformAdapter implements ViewPager.PageTransformer {
private boolean debug = true;
@Override
public void transformPage(View page, float position) {
if (position > 0 && position <= 1) {
onRightScorlling(page, position);
} else if (position < 0 && position >= -1) {
onLeftScorlling(page, position);
} else if (position == 0) {
onCenterIdle(page);
}
onTransform(page, position);
}
/**
* @param view right view
* @param position right to center 1->0
* center to right 0->1
*/
public void onRightScorlling(View view, float position) {
}
/**
* @param view left view
* @param position left to center -1->0
* center to left 0->-1
*/
public void onLeftScorlling(View view, float position) {
}
public void onCenterIdle(View view) {
}
/**
*
* @param view left and right view both callback
* @param position [-1,1]
*/
public void onTransform(View view, float position) {
}
public void log(Class<? extends TransformAdapter> clazz, String msg) {
if (debug) {
Log.d(clazz.getSimpleName(), msg);
}
}
}
以上3个可以直接当工具类,复制粘贴即可
4.最重要就这步啦
TransformUtil.reverse(mViewPager, new FlipHorizontalTransformer());
是不是非常简单?需要详细的内容可以去我的下载频道:http://download.csdn.net/detail/finally_yang/9714187