10fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout/*
20fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout * Copyright (C) 2014 The Android Open Source Project
30fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout *
40fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout * Licensed under the Apache License, Version 2.0 (the "License");
50fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout * you may not use this file except in compliance with the License.
60fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout * You may obtain a copy of the License at
70fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout *
80fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout *      http://www.apache.org/licenses/LICENSE-2.0
90fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout *
100fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout * Unless required by applicable law or agreed to in writing, software
110fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout * distributed under the License is distributed on an "AS IS" BASIS,
120fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout * See the License for the specific language governing permissions and
140fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout * limitations under the License.
150fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout */
160fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stoutpackage android.support.v17.leanback.transition;
170fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
180fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stoutimport android.animation.Animator;
190fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stoutimport android.animation.ValueAnimator;
200fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stoutimport android.view.View;
210fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stoutimport android.view.ViewGroup;
220fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stoutimport android.transition.Transition;
230fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stoutimport android.transition.TransitionValues;
240fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
254735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu/**
264735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu * @hide
274735bfcd924fec2d694523f34fac5f8151257dc7Dake Gu */
280fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stoutclass Scale extends Transition {
290fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    private static final String PROPNAME_SCALE = "android:leanback:scale";
300fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
310fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    public Scale() {
320fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
330fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
340fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    private void captureValues(TransitionValues values) {
350fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        View view = values.view;
360fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        values.values.put(PROPNAME_SCALE, view.getScaleX());
370fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
380fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
390fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    @Override
400fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    public void captureStartValues(TransitionValues transitionValues) {
410fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        captureValues(transitionValues);
420fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
430fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
440fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    @Override
450fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    public void captureEndValues(TransitionValues transitionValues) {
460fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        captureValues(transitionValues);
470fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
480fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
490fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    @Override
500fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    public Animator createAnimator(final ViewGroup sceneRoot, TransitionValues startValues,
510fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout            TransitionValues endValues) {
520fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        if (startValues == null || endValues == null) {
530fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout            return null;
540fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        }
550fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
560fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        final float startScale = (Float) startValues.values.get(PROPNAME_SCALE);
570fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        final float endScale = (Float) endValues.values.get(PROPNAME_SCALE);
580fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
590fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        final View view = startValues.view;
600fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        view.setScaleX(startScale);
610fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        view.setScaleY(startScale);
620fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout
630fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        ValueAnimator animator = ValueAnimator.ofFloat(startScale, endScale);
640fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
650fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout            @Override
660fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout            public void onAnimationUpdate(ValueAnimator animation) {
670fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout                final float scale = (Float) animation.getAnimatedValue();
680fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout                view.setScaleX(scale);
690fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout                view.setScaleY(scale);
700fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout            }
710fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        });
720fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout        return animator;
730fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout    }
740fff85d7f9dee67ec5116f3cba4e8b3961f805a7Craig Stout}
75