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