android.view.ViewPropertyAnimator#setListener ( )源码实例Demo

下面列出了android.view.ViewPropertyAnimator#setListener ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

/**
 * Animates a tab to be swiped horizontally.
 *
 * @param tabItem
 *         The tab item, which corresponds to the tab, which should be swiped, as an instance of
 *         the class {@link TabItem}. The tab item may not be null
 * @param targetPosition
 *         The position on the x-axis, the tab should be moved to, in pixels as a {@link Float}
 *         value
 * @param selected
 *         True, if the tab should become the selected one, false otherwise
 * @param animationDuration
 *         The duration of the animation in milliseconds as a {@link Long} value
 * @param velocity
 *         The velocity of the drag gesture, which caused the tab to be swiped, in pixels per
 *         second as a {@link Float} value
 */
private void animateSwipe(@NonNull final TabItem tabItem, final float targetPosition,
                          final boolean selected, final long animationDuration,
                          final float velocity) {
    View view = tabItem.getView();
    float currentPosition = getArithmetics().getPosition(Axis.X_AXIS, tabItem);
    float distance = Math.abs(targetPosition - currentPosition);
    float maxDistance = getArithmetics().getSize(Axis.X_AXIS, tabItem) + swipedTabDistance;
    long duration = velocity > 0 ? Math.round((distance / velocity) * 1000) :
            Math.round(animationDuration * (distance / maxDistance));
    ViewPropertyAnimator animation = view.animate();
    animation.setListener(new AnimationListenerWrapper(
            selected ? createSwipeSelectedTabAnimationListener(tabItem) :
                    createSwipeNeighborAnimationListener(tabItem)));
    animation.setInterpolator(new AccelerateDecelerateInterpolator());
    animation.setDuration(duration);
    animation.setStartDelay(0);
    getArithmetics().animatePosition(Axis.X_AXIS, animation, tabItem, targetPosition, true);
    animation.start();
}
 
/**
 * Starts a reveal animation to add a specific tab.
 *
 * @param item
 *         The item, which corresponds to the tab, which should be added, as an instance of the
 *         class {@link AbstractItem}. The item may not be null
 * @param revealAnimation
 *         The reveal animation, which should be started, as an instance of the class {@link
 *         RevealAnimation}. The reveal animation may not be null
 */
private void animateReveal(@NonNull final AbstractItem item,
                           @NonNull final RevealAnimation revealAnimation) {
    tabViewBottomMargin = -1;
    tabRecyclerAdapter.clearCachedPreviews();
    dragHandler.setCallback(null);
    View view = item.getView();
    ViewPropertyAnimator animation = view.animate();
    animation.setInterpolator(
            revealAnimation.getInterpolator() != null ? revealAnimation.getInterpolator() :
                    new AccelerateDecelerateInterpolator());
    animation.setListener(new AnimationListenerWrapper(createHideSwitcherAnimationListener()));
    animation.setStartDelay(0);
    animation.setDuration(revealAnimation.getDuration() != -1 ? revealAnimation.getDuration() :
            revealAnimationDuration);
    getArithmetics().animateScale(Axis.DRAGGING_AXIS, animation, 1);
    getArithmetics().animateScale(Axis.ORTHOGONAL_AXIS, animation, 1);
    animation.start();
    animateToolbarVisibility(getModel().areToolbarsShown() && getModel().isEmpty(), 0);
}
 
源代码3 项目: KernelAdiutor   文件: FrequencyButtonView.java
private void rotate(final View v, boolean reverse) {
    ViewPropertyAnimator animator = v.animate().setDuration(500).rotation(reverse ? -360 : 360);
    animator.setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            v.setRotation(0);
        }
    });
    animator.start();
}
 
源代码4 项目: Material-In   文件: MaterialIn.java
public static void startAnimators(final View view, int startOffsetX, int startOffsetY, long delay) {
    if (view.getVisibility() == View.VISIBLE && view.getAlpha() != 0f) {
        view.clearAnimation();
        view.animate().cancel();
        final Resources res = view.getResources();
        final float endAlpha = view.getAlpha();
        final float endTranslateX = view.getTranslationX();
        final float endTranslateY = view.getTranslationY();
        view.setAlpha(0);
        final Animator fade = ObjectAnimator.ofFloat(view, View.ALPHA, endAlpha);
        fade.setDuration(res.getInteger(R.integer.material_in_fade_anim_duration));
        fade.setInterpolator(new AccelerateInterpolator());
        fade.setStartDelay(delay);
        fade.start();
        ViewPropertyAnimator slide = view.animate();
        if (startOffsetY != 0) {
            view.setTranslationY(startOffsetY);
            slide.translationY(endTranslateY);
        } else {
            view.setTranslationX(startOffsetX);
            slide.translationX(endTranslateX);
        }
        slide.setInterpolator(new DecelerateInterpolator(2));
        slide.setDuration(res.getInteger(R.integer.material_in_slide_anim_duration));
        slide.setStartDelay(delay);
        slide.setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationCancel(Animator animation) {
                if (fade.isStarted()) {
                    fade.cancel();
                }
                view.setAlpha(endAlpha);
                view.setTranslationX(endTranslateX);
                view.setTranslationY(endTranslateY);
            }
        });
        slide.start();
    }
}
 
/**
 * Animates the position and size of a specific tab in order to hide the tab switcher.
 *
 * @param item
 *         The item, which corresponds to the tab, which should be animated, as an instance of
 *         the class {@link AbstractItem}. The item may not be null
 * @param duration
 *         The duration of the animation in milliseconds as a {@link Long} value
 * @param interpolator
 *         The interpolator, which should be used by the animation, as an instance of the class
 *         {@link Interpolator}. The interpolator may not be null
 * @param delay
 *         The delay of the animation in milliseconds as a {@link Long} value
 * @param listener
 *         The listener, which should be notified about the animation's progress, as an instance
 *         of the type {@link AnimatorListener} or null, if no listener should be notified
 */
private void animateHideSwitcher(@NonNull final AbstractItem item, final long duration,
                                 @NonNull final Interpolator interpolator, final long delay,
                                 @Nullable final AnimatorListener listener) {
    View view = item.getView();
    animateBottomMargin(view, -(tabInset + tabBorderWidth), duration, delay);
    ViewPropertyAnimator animation = view.animate();
    animation.setDuration(duration);
    animation.setInterpolator(interpolator);
    animation.setListener(new AnimationListenerWrapper(listener));
    getArithmetics().animateScale(Axis.DRAGGING_AXIS, animation, 1);
    getArithmetics().animateScale(Axis.ORTHOGONAL_AXIS, animation, 1);
    FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) view.getLayoutParams();
    getArithmetics().animatePosition(Axis.ORTHOGONAL_AXIS, animation, item,
            getTabSwitcher().getLayout() == Layout.PHONE_LANDSCAPE ? layoutParams.topMargin :
                    0);
    int selectedTabIndex = getModel().getSelectedTabIndex();

    if (item.getIndex() < selectedTabIndex) {
        getArithmetics().animatePosition(Axis.DRAGGING_AXIS, animation, item,
                getArithmetics().getTabContainerSize(Axis.DRAGGING_AXIS));
    } else if (item.getIndex() > selectedTabIndex) {
        getArithmetics().animatePosition(Axis.DRAGGING_AXIS, animation, item,
                getTabSwitcher().getLayout() == Layout.PHONE_LANDSCAPE ? 0 :
                        layoutParams.topMargin);
    } else {
        getArithmetics().animatePosition(Axis.DRAGGING_AXIS, animation, item,
                getTabSwitcher().getLayout() == Layout.PHONE_LANDSCAPE ? 0 :
                        layoutParams.topMargin);
    }

    animation.setStartDelay(delay);
    animation.start();
}
 
/**
 * Animates the position, size and alpha of a specific tab in order to swipe it orthogonally.
 *
 * @param item
 *         The item, corresponds to the tab, which should be animated, as an instance of the
 *         class {@link AbstractItem}. The item may not be null
 * @param remove
 *         True, if the tab should be removed after the animation has finished, false otherwise
 * @param delayMultiplier
 *         The multiplied, which should be used to calculate the delay after which the animation
 *         should be started, by being multiplied with the default delay, as an {@link Integer}
 *         value
 * @param swipeAnimation
 *         The animation, which should be used, as an instance of the class {@link
 *         SwipeAnimation}. The animation may not be null
 * @param listener
 *         The listener, which should be notified about the progress of the animation, as an
 *         instance of the type {@link AnimatorListener} or null, if no listener should be
 *         notified
 */
private void animateSwipe(@NonNull final AbstractItem item, final boolean remove,
                          final int delayMultiplier,
                          @NonNull final SwipeAnimation swipeAnimation,
                          @Nullable final AnimatorListener listener) {
    View view = item.getView();
    float currentScale = getArithmetics().getScale(item, true);
    float swipePosition = calculateSwipePosition();
    float targetPosition = remove ?
            (swipeAnimation.getDirection() == SwipeDirection.LEFT_OR_TOP ? -1 * swipePosition :
                    swipePosition) : 0;
    float currentPosition = getArithmetics().getPosition(Axis.ORTHOGONAL_AXIS, item);
    float distance = Math.abs(targetPosition - currentPosition);
    long animationDuration = swipeAnimation.getDuration() != -1 ? swipeAnimation.getDuration() :
            Math.round(swipeAnimationDuration * (distance / swipePosition));
    ViewPropertyAnimator animation = view.animate();
    animation.setInterpolator(
            swipeAnimation.getInterpolator() != null ? swipeAnimation.getInterpolator() :
                    new AccelerateDecelerateInterpolator());
    animation.setListener(new AnimationListenerWrapper(listener));
    animation.setDuration(animationDuration);
    getArithmetics()
            .animatePosition(Axis.ORTHOGONAL_AXIS, animation, item, targetPosition, true);
    getArithmetics().animateScale(Axis.ORTHOGONAL_AXIS, animation,
            remove ? swipedTabScale * currentScale : currentScale);
    getArithmetics().animateScale(Axis.DRAGGING_AXIS, animation,
            remove ? swipedTabScale * currentScale : currentScale);
    animation.alpha(remove ? swipedTabAlpha : 1);
    animation.setStartDelay(delayMultiplier * calculateAnimationDelay(animationDuration));
    animation.start();
}
 
/**
 * Animates to rotation of all tabs to be reset to normal.
 *
 * @param interpolator
 *         The interpolator, which should be used by the animation, as an instance of the type
 *         {@link Interpolator}. The interpolator may not be null
 * @param maxAngle
 *         The angle, the tabs may be rotated by at maximum, in degrees as a {@link Float}
 *         value
 * @param listener
 *         The listener, which should be notified about the animation's progress, as an instance
 *         of the type {@link AnimatorListener} or null, if no listener should be notified
 * @return True, if at least one tab was animated, false otherwise
 */
private boolean animateTilt(@NonNull final Interpolator interpolator, final float maxAngle,
                            @Nullable final AnimatorListener listener) {
    ItemIterator iterator =
            new ItemIterator.Builder(getTabSwitcher(), tabViewRecycler).reverse(true).create();
    AbstractItem item;
    boolean result = false;

    while ((item = iterator.next()) != null) {
        if (item.isInflated() &&
                getArithmetics().getRotation(Axis.ORTHOGONAL_AXIS, item) != 0) {
            View view = item.getView();
            ViewPropertyAnimator animation = view.animate();
            animation.setListener(new AnimationListenerWrapper(
                    createRevertOvershootAnimationListener(item, !result ? listener : null)));
            animation.setDuration(Math.round(revertOvershootAnimationDuration *
                    (Math.abs(getArithmetics().getRotation(Axis.ORTHOGONAL_AXIS, item)) /
                            maxAngle)));
            animation.setInterpolator(interpolator);
            getArithmetics().animateRotation(Axis.ORTHOGONAL_AXIS, animation, 0);
            animation.setStartDelay(0);
            animation.start();
            result = true;
        }
    }

    return result;
}
 
/**
 * Starts a peek animation to add a specific tab.
 *
 * @param item
 *         The item, which corresponds to the tab, which should be added, as an instance of the
 *         class {@link AbstractItem}. The item may not be null
 * @param duration
 *         The duration of the animation in milliseconds as a {@link Long} value
 * @param interpolator
 *         The interpolator, which should be used by the animation, as an instance of the type
 *         {@link Interpolator}. The interpolator may not be null
 * @param peekPosition
 *         The position on the dragging axis, the tab should be moved to, in pixels as a {@link
 *         Float} value
 * @param peekAnimation
 *         The peek animation, which has been used to add the tab, as an instance of the class
 *         {@link PeekAnimation}. The peek animation may not be null
 */
private void animatePeek(@NonNull final AbstractItem item, final long duration,
                         @NonNull final Interpolator interpolator, final float peekPosition,
                         @NonNull final PeekAnimation peekAnimation) {
    PhoneTabViewHolder viewHolder = (PhoneTabViewHolder) ((TabItem) item).getViewHolder();
    viewHolder.closeButton.setVisibility(View.GONE);
    View view = item.getView();
    float x = peekAnimation.getX();
    float y = peekAnimation.getY() + tabTitleContainerHeight;
    FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) view.getLayoutParams();
    view.setAlpha(1f);
    getArithmetics().setPivot(Axis.X_AXIS, item, x);
    getArithmetics().setPivot(Axis.Y_AXIS, item, y);
    view.setX(layoutParams.leftMargin);
    view.setY(layoutParams.topMargin);
    getArithmetics().setScale(Axis.DRAGGING_AXIS, item, 0);
    getArithmetics().setScale(Axis.ORTHOGONAL_AXIS, item, 0);
    ViewPropertyAnimator animation = view.animate();
    animation.setInterpolator(interpolator);
    animation.setListener(
            new AnimationListenerWrapper(createPeekAnimationListener(item, peekAnimation)));
    animation.setStartDelay(0);
    animation.setDuration(duration);
    getArithmetics().animateScale(Axis.DRAGGING_AXIS, animation, 1);
    getArithmetics().animateScale(Axis.ORTHOGONAL_AXIS, animation, 1);
    getArithmetics().animatePosition(Axis.DRAGGING_AXIS, animation, item, peekPosition, true);
    animation.start();
    int selectedTabIndex = getModel().getSelectedTabIndex();
    TabItem selectedItem = TabItem.create(getModel(), tabViewRecycler, selectedTabIndex);
    tabViewRecycler.inflate(selectedItem);
    selectedItem.getTag().setPosition(0);
    PhoneTabViewHolder selectedTabViewHolder =
            (PhoneTabViewHolder) selectedItem.getViewHolder();
    selectedTabViewHolder.closeButton.setVisibility(View.GONE);
    animateShowSwitcher(selectedItem, duration, interpolator,
            createZoomOutAnimationListener(selectedItem, peekAnimation));
}
 
/**
 * Creates and returns an animation listener, which allows to hide a tab, which has been added
 * by using a peek animation, when the animation has been ended.
 *
 * @param item
 *         The item, which corresponds to the tab, which has been added by using the peek
 *         animation, as an instance of the class {@link AbstractItem}. The item may not be
 *         null
 * @param peekAnimation
 *         The peek animation as an instance of the class {@link PeekAnimation}. The peek
 *         animation may not be null
 * @return The listener, which has been created, as an instance of the type {@link
 * AnimatorListener}. The listener may not be null
 */
@NonNull
private AnimatorListener createPeekAnimationListener(@NonNull final AbstractItem item,
                                                     @NonNull final PeekAnimation peekAnimation) {
    return new AnimatorListenerAdapter() {

        @Override
        public void onAnimationEnd(final Animator animation) {
            super.onAnimationEnd(animation);
            long totalDuration =
                    peekAnimation.getDuration() != -1 ? peekAnimation.getDuration() :
                            peekAnimationDuration;
            long duration = totalDuration / 3;
            Interpolator interpolator =
                    peekAnimation.getInterpolator() != null ? peekAnimation.getInterpolator() :
                            new AccelerateDecelerateInterpolator();
            View view = item.getView();
            getArithmetics().setPivot(Axis.DRAGGING_AXIS, item, tabTitleContainerHeight);
            getArithmetics().setPivot(Axis.ORTHOGONAL_AXIS, item,
                    getArithmetics().getSize(Axis.ORTHOGONAL_AXIS, item) / 2f);
            ViewPropertyAnimator animator = view.animate();
            animator.setDuration(duration);
            animator.setStartDelay(duration);
            animator.setInterpolator(interpolator);
            animator.setListener(
                    new AnimationListenerWrapper(createRevertPeekAnimationListener(item)));
            animator.alpha(0);
            getArithmetics().animatePosition(Axis.DRAGGING_AXIS, animator, item,
                    getArithmetics().getPosition(Axis.DRAGGING_AXIS, item) * 1.5f);
            getArithmetics().animateScale(Axis.DRAGGING_AXIS, animator, 0);
            getArithmetics().animateScale(Axis.ORTHOGONAL_AXIS, animator, 0);
            animator.start();
        }

    };
}
 
源代码10 项目: social-app-android   文件: PostDetailsActivity.java
@Override
public void onBackPressed() {
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
            && isAuthorAnimationRequired
            && !authorAnimationInProgress
            && !AnimationUtils.isViewHiddenByScale(authorImageView)) {

        ViewPropertyAnimator hideAuthorAnimator = com.rozdoum.socialcomponents.utils.AnimationUtils.hideViewByScale(authorImageView);
        hideAuthorAnimator.setListener(authorAnimatorListener);
        hideAuthorAnimator.withEndAction(PostDetailsActivity.this::onBackPressed);
    } else {
        super.onBackPressed();
    }
}
 
源代码11 项目: Genius-Android   文件: BalloonMarker.java
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public void animateClose() {
    mBalloonMarkerDrawable.stop();

    ViewPropertyAnimator animator = mNumber.animate();
    animator.alpha(0f);
    animator.setDuration(100);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        animator.withEndAction(new Runnable() {
            @Override
            public void run() {
                //We use INVISIBLE instead of GONE to avoid a requestLayout
                mNumber.setVisibility(View.INVISIBLE);
                mBalloonMarkerDrawable.animateToNormal();
            }
        });
    } else {
        animator.setListener(new AnimatorListener() {
            @Override
            public void onAnimationEnd(Animator animation) {
                //We use INVISIBLE instead of GONE to avoid a requestLayout
                mNumber.setVisibility(View.INVISIBLE);
                mBalloonMarkerDrawable.animateToNormal();
            }
        });
    }
    animator.start();
}
 
private void startExitAnimation(final Runnable onAnimationNearlyEnded) {
    Interpolator interpolator = new AccelerateInterpolator();
    final View viewForAnimationNearlyEnded = mExitAnimationViews.get(5);
    for (int i = 0; i < mExitAnimationViews.size(); ++i) {
        final View v = mExitAnimationViews.get(i);
        v.setAlpha(1f);
        v.setTranslationY(0);
        ViewPropertyAnimator animator = v.animate();
        if (v == viewForAnimationNearlyEnded) {
            animator.setListener(new AnimatorEndWithoutCancelListener() {
                @Override
                public void onAnimationEndWithoutCancel() {
                    onAnimationNearlyEnded.run();
                }
            });
        }
        animator
                .withLayer()
                .alpha(0.0f)
                .translationY(-75)
                .setInterpolator(interpolator)
                .setStartDelay(mAnimStaggerDelay * i)
                .setDuration(mAnimShortDuration)
                .start();
    }
    mFavoriteBtn.animate()
            .withLayer()
            .scaleX(0f)
            .scaleY(0f)
            .setInterpolator(interpolator)
            .setDuration(mAnimShortDuration)
            .start();
}
 
源代码13 项目: trekarta   文件: MainActivity.java
private void updateLocationDrawable() {
    logger.debug("updateLocationDrawable()");
    if (mViews.recordButton.getTag() != mTrackingState) {
        int recordColor = mTrackingState == TRACKING_STATE.TRACKING ? mColorAccent : mColorActionIcon;
        mViews.recordButton.getDrawable().setTint(recordColor);
        mViews.recordButton.setTag(mTrackingState);
    }
    if (mViews.locationButton.getTag() == mLocationState)
        return;
    if (mViews.locationButton.getTag() == LocationState.SEARCHING) {
        mViews.locationButton.clearAnimation();
        mViews.satellites.animate().translationY(-200);
    }
    final ViewPropertyAnimator gaugePanelAnimator = mViews.gaugePanel.animate();
    gaugePanelAnimator.setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            if (mLocationState == LocationState.NORTH)
                HelperUtils.showTargetedAdvice(MainActivity.this, Configuration.ADVICE_MORE_GAUGES, R.string.advice_more_gauges, mViews.gaugePanel, true);
            //HelperUtils.showAdvice(Configuration.ADVICE_MORE_GAUGES, R.string.advice_more_gauges, mViews.coordinatorLayout);
            if (mLocationState == LocationState.SEARCHING)
                mViews.satellites.animate().translationY(8);
            gaugePanelAnimator.setListener(null);
            updateMapViewArea();
        }
    });
    switch (mLocationState) {
        case DISABLED:
            mNavigationNorthDrawable.setTint(mColorActionIcon);
            mViews.locationButton.setImageDrawable(mNavigationNorthDrawable);
            mCrosshairLayer.setEnabled(true);
            if (mViews.gaugePanel.getWidth() > 0) {
                gaugePanelAnimator.translationX(-mViews.gaugePanel.getWidth());
                mViews.gaugePanel.onVisibilityChanged(false);
            }
            break;
        case SEARCHING:
            mLocationSearchingDrawable.setTint(mColorAccent);
            mViews.locationButton.setImageDrawable(mLocationSearchingDrawable);
            Animation rotation = new RotateAnimation(0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
            rotation.setInterpolator(new LinearInterpolator());
            rotation.setRepeatCount(Animation.INFINITE);
            rotation.setDuration(1000);
            mViews.locationButton.startAnimation(rotation);
            if (mViews.gaugePanel.getVisibility() == View.INVISIBLE) {
                mViews.satellites.animate().translationY(8);
            } else {
                gaugePanelAnimator.translationX(-mViews.gaugePanel.getWidth());
                mViews.gaugePanel.onVisibilityChanged(false);
            }
            break;
        case ENABLED:
            mMyLocationDrawable.setTint(mColorActionIcon);
            mViews.locationButton.setImageDrawable(mMyLocationDrawable);
            mCrosshairLayer.setEnabled(true);
            gaugePanelAnimator.translationX(-mViews.gaugePanel.getWidth());
            mViews.gaugePanel.onVisibilityChanged(false);
            break;
        case NORTH:
            mNavigationNorthDrawable.setTint(mColorAccent);
            mViews.locationButton.setImageDrawable(mNavigationNorthDrawable);
            mCrosshairLayer.setEnabled(false);
            gaugePanelAnimator.translationX(0);
            mViews.gaugePanel.onVisibilityChanged(true);
            break;
        case TRACK:
            mNavigationTrackDrawable.setTint(mColorAccent);
            mViews.locationButton.setImageDrawable(mNavigationTrackDrawable);
            mCrosshairLayer.setEnabled(false);
            gaugePanelAnimator.translationX(0);
            mViews.gaugePanel.onVisibilityChanged(true);
    }
    mViews.locationButton.setTag(mLocationState);
    for (WeakReference<LocationStateChangeListener> weakRef : mLocationStateChangeListeners) {
        LocationStateChangeListener locationStateChangeListener = weakRef.get();
        if (locationStateChangeListener != null) {
            locationStateChangeListener.onLocationStateChanged(mLocationState);
        }
    }
}
 
源代码14 项目: LaunchEnr   文件: FirstFrameAnimatorHelper.java
public FirstFrameAnimatorHelper(ViewPropertyAnimator vpa, View target) {
    mTarget = target;
    vpa.setListener(this);
}
 
源代码15 项目: LB-Launcher   文件: FirstFrameAnimatorHelper.java
public FirstFrameAnimatorHelper(ViewPropertyAnimator vpa, View target) {
    mTarget = target;
    vpa.setListener(this);
}
 
/**
 * Animates the position of a specific tab in order to relocate it.
 *
 * @param item
 *         The item, which corresponds to the tab, which should be animated, as an instance of
 *         the class {@link AbstractItem}. The item may not be null
 * @param position
 *         The position, the tab should be relocated to, in pixels as a {@link Float} value
 * @param tag
 *         The tag, which should be applied to the given item, as an instance of the class
 *         {@link Tag} or null, if no tag should be applied
 * @param delayMultiplier
 *         The multiplier, which should be used to calculate the delay of the relocate
 *         animation, by being multiplied with the default delay, as an {@link Integer} value
 * @param listener
 *         The listener, which should be notified about the progress of the relocate animation,
 *         as an instance of the type {@link AnimatorListener} or null, if no listener should be
 *         notified
 * @param swipeAnimation
 *         The animation, which has been used to add or remove the tab, which caused the other
 *         tabs to be relocated, as an instance of the class {@link SwipeAnimation}. The
 *         animation may not be null
 */
private void animateRelocate(@NonNull final AbstractItem item, final float position,
                             @Nullable final Tag tag, final int delayMultiplier,
                             @Nullable final AnimatorListener listener,
                             @NonNull final SwipeAnimation swipeAnimation) {
    if (tag != null) {
        item.getView().setTag(R.id.tag_properties, tag);
        item.setTag(tag);
    }

    View view = item.getView();
    long animationDuration = swipeAnimation.getRelocateAnimationDuration() != -1 ?
            swipeAnimation.getRelocateAnimationDuration() : relocateAnimationDuration;
    ViewPropertyAnimator animation = view.animate();
    animation.setListener(new AnimationListenerWrapper(listener));
    animation.setInterpolator(new AccelerateDecelerateInterpolator());
    animation.setDuration(animationDuration);
    getArithmetics().animatePosition(Axis.DRAGGING_AXIS, animation, item, position, true);
    animation.setStartDelay(delayMultiplier * calculateAnimationDelay(animationDuration));
    animation.start();
}
 
源代码17 项目: Trebuchet   文件: FirstFrameAnimatorHelper.java
public FirstFrameAnimatorHelper(ViewPropertyAnimator vpa, View target) {
    mTarget = target;
    vpa.setListener(this);
}
 
源代码18 项目: Material-Movies   文件: GUIUtils.java
/**
 * Shows a view by scaling
 *
 * @param v the view to be scaled
 *
 * @return the ViewPropertyAnimation to manage the animation
 */
public static ViewPropertyAnimator showViewByScaleY (View v, AnimatorListener animatorListener) {

    ViewPropertyAnimator propertyAnimator = v.animate().setStartDelay(SCALE_DELAY)
       .scaleY(1);

    propertyAnimator.setListener(animatorListener);

    return propertyAnimator;
}
 
源代码19 项目: Material-Movies   文件: GUIUtils.java
public static ViewPropertyAnimator showViewByScale (View v, AnimatorListener animatorListener) {

        ViewPropertyAnimator propertyAnimator = v.animate().setStartDelay(SCALE_DELAY)
            .scaleY(1).scaleX(1);

        propertyAnimator.setListener(animatorListener);

        return propertyAnimator;
    }
 
源代码20 项目: Material-Movies   文件: GUIUtils.java
public static void hideScaleAnimationFromPivot(View v, AnimatorListener animatorListener) {

        ViewPropertyAnimator viewPropertyAnimator = v.animate()
            .setInterpolator(new AccelerateDecelerateInterpolator())
            .scaleY(SCALE_START_ANCHOR)
            .setDuration(SCALE_DELAY);

        if (animatorListener != null)
            viewPropertyAnimator.setListener(animatorListener);

        viewPropertyAnimator.start();

    }