package com.tiger.quicknews.wedget.viewimage.Transformers; import android.view.View; import com.nineoldandroids.view.ViewHelper; import com.tiger.quicknews.wedget.viewimage.Animations.BaseAnimationInterface; import com.tiger.quicknews.wedget.viewimage.Tricks.ViewPagerEx; import java.util.ArrayList; import java.util.HashMap; /** * This is all transformers father. BaseTransformer implement * {@link com.example.androidimageslider.wedget.viewimage.Tricks.daimajia.slider.library.Tricks.ViewPagerEx.PageTransformer} which * is just same as {@link android.support.v4.view.ViewPager.PageTransformer}. * After you call setPageTransformer(), transformPage() will be called by * {@link com.example.androidimageslider.wedget.viewimage.Tricks.daimajia.slider.library.Tricks.ViewPagerEx} when your slider are * animating. In onPreTransform() function, that will make * {@link com.example.androidimageslider.wedget.viewimage.Animations.daimajia.slider.library.Animations.BaseAnimationInterface} work. * if you want to make an acceptable transformer, please do not forget to extend * from this class. */ public abstract class BaseTransformer implements ViewPagerEx.PageTransformer { private BaseAnimationInterface mCustomAnimationInterface; /** * Called each {@link #transformPage(View, float)}. * * @param view * @param position */ protected abstract void onTransform(View view, float position); private final HashMap<View, ArrayList<Float>> h = new HashMap<View, ArrayList<Float>>(); @Override public void transformPage(View view, float position) { onPreTransform(view, position); onTransform(view, position); onPostTransform(view, position); } /** * If the position offset of a fragment is less than negative one or greater * than one, returning true will set the visibility of the fragment to * {@link View#GONE}. Returning false will force the fragment to * {@link View#VISIBLE}. * * @return */ protected boolean hideOffscreenPages() { return true; } /** * Indicates if the default animations of the view pager should be used. * * @return */ protected boolean isPagingEnabled() { return false; } /** * Called each {@link #transformPage(View, float)} before { * {@link #onTransform(View, float)} is called. * * @param view * @param position */ protected void onPreTransform(View view, float position) { final float width = view.getWidth(); ViewHelper.setRotationX(view, 0); ViewHelper.setRotationY(view, 0); ViewHelper.setRotation(view, 0); ViewHelper.setScaleX(view, 1); ViewHelper.setScaleY(view, 1); ViewHelper.setPivotX(view, 0); ViewHelper.setPivotY(view, 0); ViewHelper.setTranslationY(view, 0); ViewHelper.setTranslationX(view, isPagingEnabled() ? 0f : -width * position); if (hideOffscreenPages()) { ViewHelper.setAlpha(view, position <= -1f || position >= 1f ? 0f : 1f); } else { ViewHelper.setAlpha(view, 1f); } if (mCustomAnimationInterface != null) { if (h.containsKey(view) == false || h.get(view).size() == 1) { if (position > -1 && position < 1) { if (h.get(view) == null) { h.put(view, new ArrayList<Float>()); } h.get(view).add(position); if (h.get(view).size() == 2) { float zero = h.get(view).get(0); float cha = h.get(view).get(1) - h.get(view).get(0); if (zero > 0) { if (cha > -1 && cha < 0) { // in mCustomAnimationInterface.onPrepareNextItemShowInScreen(view); } else { // out mCustomAnimationInterface.onPrepareCurrentItemLeaveScreen(view); } } else { if (cha > -1 && cha < 0) { // out mCustomAnimationInterface.onPrepareCurrentItemLeaveScreen(view); } else { // in mCustomAnimationInterface.onPrepareNextItemShowInScreen(view); } } } } } } } boolean isApp, isDis; /** * Called each {@link #transformPage(View, float)} call after * {@link #onTransform(View, float)} is finished. * * @param view * @param position */ protected void onPostTransform(View view, float position) { if (mCustomAnimationInterface != null) { if (position == -1 || position == 1) { mCustomAnimationInterface.onCurrentItemDisappear(view); isApp = true; } else if (position == 0) { mCustomAnimationInterface.onNextItemAppear(view); isDis = true; } if (isApp && isDis) { h.clear(); isApp = false; isDis = false; } } } public void setCustomAnimationInterface(BaseAnimationInterface animationInterface) { mCustomAnimationInterface = animationInterface; } }