me.lizheng.deckview.helpers.DeckChildViewTransform.java Source code

Java tutorial

Introduction

Here is the source code for me.lizheng.deckview.helpers.DeckChildViewTransform.java

Source

/*
 * Copyright (C) 2016 Zheng Li <https://lizheng.me>
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package me.lizheng.deckview.helpers;

import android.graphics.Rect;
import android.support.v4.view.ViewCompat;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.view.animation.Interpolator;

/* The transform state for a task view */
public class DeckChildViewTransform {
    public int startDelay = 0;
    public int translationY = 0;
    public float translationZ = 0;
    public float scale = 1f;
    public float alpha = 1f;
    public boolean visible = false;
    public Rect rect = new Rect();
    public float p = 0f;

    public DeckChildViewTransform() {
        // Do nothing
    }

    //    public DeckChildViewTransform(DeckChildViewTransform o) {
    //        startDelay = o.startDelay;
    //        translationY = o.translationY;
    //        translationZ = o.translationZ;
    //        scale = o.scale;
    //        alpha = o.alpha;
    //        visible = o.visible;
    //        rect.set(o.rect);
    //        p = o.p;
    //    }

    /**
     * Resets the current transform
     */
    public void reset() {
        startDelay = 0;
        translationY = 0;
        translationZ = 0;
        scale = 1f;
        alpha = 1f;
        visible = false;
        rect.setEmpty();
        p = 0f;
    }

    /**
     * Convenience functions to compare against current property values
     */
    public boolean hasAlphaChangedFrom(float v) {
        return (Float.compare(alpha, v) != 0);
    }

    public boolean hasScaleChangedFrom(float v) {
        return (Float.compare(scale, v) != 0);
    }

    public boolean hasTranslationYChangedFrom(float v) {
        return (Float.compare(translationY, v) != 0);
    }

    public boolean hasTranslationZChangedFrom(float v) {
        return (Float.compare(translationZ, v) != 0);
    }

    /**
     * Applies this transform to a view.
     */
    public void applyToTaskView(View v, int duration, Interpolator interp, /*boolean allowLayers,*/
            boolean allowShadows/*, ValueAnimator.AnimatorUpdateListener updateCallback*/) {
        // Check to see if any properties have changed, and update the task view
        if (duration > 0) {
            ViewPropertyAnimator anim = v.animate();
            //            boolean requiresLayers = false;

            // Animate to the final state
            if (hasTranslationYChangedFrom(v.getTranslationY())) {
                anim.translationY(translationY);
            }
            //            if (allowShadows && hasTranslationZChangedFrom(v.getTranslationZ())) {
            //                anim.translationZ(translationZ);
            //            }
            if (hasScaleChangedFrom(v.getScaleX())) {
                anim.scaleX(scale).scaleY(scale);
                //                requiresLayers = true;
            }
            if (hasAlphaChangedFrom(v.getAlpha())) {
                // Use layers if we animate alpha
                anim.alpha(alpha);
                //                requiresLayers = true;
            }
            //            if (requiresLayers && allowLayers) {
            //                anim.withLayer();
            //            }
            //            if (updateCallback != null) {
            //                anim.setUpdateListener(updateCallback);
            //            } else {
            //                anim.setUpdateListener(null);
            //            }
            anim.setStartDelay(startDelay).setDuration(duration).setInterpolator(interp).start();
        } else {
            // Set the changed properties
            if (hasTranslationYChangedFrom(v.getTranslationY())) {
                v.setTranslationY(translationY);
            }
            if (allowShadows && hasTranslationZChangedFrom(ViewCompat.getTranslationZ(v))) {
                ViewCompat.setTranslationZ(v, translationZ);
            }
            if (hasScaleChangedFrom(v.getScaleX())) {
                v.setScaleX(scale);
                v.setScaleY(scale);
            }
            if (hasAlphaChangedFrom(v.getAlpha())) {
                v.setAlpha(alpha);
            }
        }
    }

    /**
     * Reset the transform on a view.
     */
    public static void reset(View v) {
        v.setTranslationX(0f);
        v.setTranslationY(0f);
        ViewCompat.setTranslationZ(v, 0f);
        v.setScaleX(1f);
        v.setScaleY(1f);
        v.setAlpha(1f);
    }

    @Override
    public String toString() {
        return "TaskViewTransform delay: " + startDelay + " y: " + translationY + " z: " + translationZ + " scale: "
                + scale + " alpha: " + alpha + " visible: " + visible + " rect: " + rect + " p: " + p;
    }
}