ScaleAnimation.java revision f9d0be917b6f80efad29dce88ad2d2f117986c57
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.view.animation; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 20f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackbornimport android.content.res.Resources; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 23f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackbornimport android.util.TypedValue; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An animation that controls the scale of an object. You can specify the point 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to use for the center of scaling. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ScaleAnimation extends Animation { 31f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn private final Resources mResources; 32f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mFromX; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mToX; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mFromY; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mToY; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 38f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn private int mFromXType = TypedValue.TYPE_NULL; 39f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn private int mToXType = TypedValue.TYPE_NULL; 40f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn private int mFromYType = TypedValue.TYPE_NULL; 41f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn private int mToYType = TypedValue.TYPE_NULL; 42f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn 43f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn private int mFromXData = 0; 44f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn private int mToXData = 0; 45f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn private int mFromYData = 0; 46f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn private int mToYData = 0; 47f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mPivotXType = ABSOLUTE; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mPivotYType = ABSOLUTE; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mPivotXValue = 0.0f; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mPivotYValue = 0.0f; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mPivotX; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mPivotY; 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 57bdbdc4f92951200a88d4c754448b9f91626ffc04The Android Open Source Project * Constructor used when a ScaleAnimation is loaded from a resource. 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param context Application context to use 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param attrs Attribute set from which to read values 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ScaleAnimation(Context context, AttributeSet attrs) { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 65f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mResources = context.getResources(); 66f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TypedArray a = context.obtainStyledAttributes(attrs, 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.ScaleAnimation); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 70f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn TypedValue tv = a.peekValue( 71f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn com.android.internal.R.styleable.ScaleAnimation_fromXScale); 72f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromX = 0.0f; 73f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (tv != null) { 74f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (tv.type == TypedValue.TYPE_FLOAT) { 75f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn // This is a scaling factor. 76f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromX = tv.getFloat(); 77f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } else { 78f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromXType = tv.type; 79f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromXData = tv.data; 80f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 81f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 82f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn tv = a.peekValue( 83f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn com.android.internal.R.styleable.ScaleAnimation_toXScale); 84f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToX = 0.0f; 85f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (tv != null) { 86f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (tv.type == TypedValue.TYPE_FLOAT) { 87f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn // This is a scaling factor. 88f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToX = tv.getFloat(); 89f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } else { 90f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToXType = tv.type; 91f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToXData = tv.data; 92f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 93f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 95f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn tv = a.peekValue( 96f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn com.android.internal.R.styleable.ScaleAnimation_fromYScale); 97f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromY = 0.0f; 98f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (tv != null) { 99f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (tv.type == TypedValue.TYPE_FLOAT) { 100f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn // This is a scaling factor. 101f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromY = tv.getFloat(); 102f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } else { 103f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromYType = tv.type; 104f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromYData = tv.data; 105f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 106f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 107f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn tv = a.peekValue( 108f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn com.android.internal.R.styleable.ScaleAnimation_toYScale); 109f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToY = 0.0f; 110f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (tv != null) { 111f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (tv.type == TypedValue.TYPE_FLOAT) { 112f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn // This is a scaling factor. 113f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToY = tv.getFloat(); 114f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } else { 115f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToYType = tv.type; 116f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToYData = tv.data; 117f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 118f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Description d = Description.parseValue(a.peekValue( 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.ScaleAnimation_pivotX)); 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotXType = d.type; 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotXValue = d.value; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project d = Description.parseValue(a.peekValue( 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project com.android.internal.R.styleable.ScaleAnimation_pivotY)); 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotYType = d.type; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotYValue = d.value; 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor to use when building a ScaleAnimation from code 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fromX Horizontal scaling factor to apply at the start of the 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * animation 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param toX Horizontal scaling factor to apply at the end of the animation 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fromY Vertical scaling factor to apply at the start of the 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * animation 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param toY Vertical scaling factor to apply at the end of the animation 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ScaleAnimation(float fromX, float toX, float fromY, float toY) { 144f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mResources = null; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFromX = fromX; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToX = toX; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFromY = fromY; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToY = toY; 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotX = 0; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotY = 0; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor to use when building a ScaleAnimation from code 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fromX Horizontal scaling factor to apply at the start of the 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * animation 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param toX Horizontal scaling factor to apply at the end of the animation 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fromY Vertical scaling factor to apply at the start of the 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * animation 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param toY Vertical scaling factor to apply at the end of the animation 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pivotX The X coordinate of the point about which the object is 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * being scaled, specified as an absolute number where 0 is the left 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * edge. (This point remains fixed while the object changes size.) 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pivotY The Y coordinate of the point about which the object is 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * being scaled, specified as an absolute number where 0 is the top 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * edge. (This point remains fixed while the object changes size.) 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ScaleAnimation(float fromX, float toX, float fromY, float toY, 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float pivotX, float pivotY) { 171f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mResources = null; 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFromX = fromX; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToX = toX; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFromY = fromY; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToY = toY; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotXType = ABSOLUTE; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotYType = ABSOLUTE; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotXValue = pivotX; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotYValue = pivotY; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor to use when building a ScaleAnimation from code 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fromX Horizontal scaling factor to apply at the start of the 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * animation 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param toX Horizontal scaling factor to apply at the end of the animation 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fromY Vertical scaling factor to apply at the start of the 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * animation 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param toY Vertical scaling factor to apply at the end of the animation 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pivotXType Specifies how pivotXValue should be interpreted. One of 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Animation.RELATIVE_TO_PARENT. 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pivotXValue The X coordinate of the point about which the object 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is being scaled, specified as an absolute number where 0 is the 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * left edge. (This point remains fixed while the object changes 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * size.) This value can either be an absolute number if pivotXType 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is ABSOLUTE, or a percentage (where 1.0 is 100%) otherwise. 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pivotYType Specifies how pivotYValue should be interpreted. One of 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Animation.RELATIVE_TO_PARENT. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param pivotYValue The Y coordinate of the point about which the object 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is being scaled, specified as an absolute number where 0 is the 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * top edge. (This point remains fixed while the object changes 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * size.) This value can either be an absolute number if pivotYType 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is ABSOLUTE, or a percentage (where 1.0 is 100%) otherwise. 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ScaleAnimation(float fromX, float toX, float fromY, float toY, 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) { 211f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mResources = null; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFromX = fromX; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToX = toX; 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFromY = fromY; 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mToY = toY; 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotXValue = pivotXValue; 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotXType = pivotXType; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotYValue = pivotYValue; 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotYType = pivotYType; 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void applyTransformation(float interpolatedTime, Transformation t) { 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sx = 1.0f; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float sy = 1.0f; 2274846032ac7be7c28c7cfeb3096b8cb656312a382Chet Haase float scale = getScaleFactor(); 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mFromX != 1.0f || mToX != 1.0f) { 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sx = mFromX + ((mToX - mFromX) * interpolatedTime); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mFromY != 1.0f || mToY != 1.0f) { 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sy = mFromY + ((mToY - mFromY) * interpolatedTime); 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mPivotX == 0 && mPivotY == 0) { 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project t.getMatrix().setScale(sx, sy); 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 2394846032ac7be7c28c7cfeb3096b8cb656312a382Chet Haase t.getMatrix().setScale(sx, sy, scale * mPivotX, scale * mPivotY); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 243f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn float resolveScale(float scale, int type, int data, int size, int psize) { 244f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn float targetSize; 245f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (type == TypedValue.TYPE_FRACTION) { 246f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn targetSize = TypedValue.complexToFraction(data, size, psize); 247f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } else if (type == TypedValue.TYPE_DIMENSION) { 248f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn targetSize = TypedValue.complexToDimension(data, mResources.getDisplayMetrics()); 249f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } else { 250f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn return scale; 251f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 252f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn 253f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn if (size == 0) { 254f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn return 1; 255f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 256f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn 257f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn return targetSize/(float)size; 258f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn } 259f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void initialize(int width, int height, int parentWidth, int parentHeight) { 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.initialize(width, height, parentWidth, parentHeight); 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 264f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromX = resolveScale(mFromX, mFromXType, mFromXData, width, parentWidth); 265f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToX = resolveScale(mToX, mToXType, mToXData, width, parentWidth); 266f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mFromY = resolveScale(mFromY, mFromYType, mFromYData, height, parentHeight); 267f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn mToY = resolveScale(mToY, mToYType, mToYData, height, parentHeight); 268f9d0be917b6f80efad29dce88ad2d2f117986c57Dianne Hackborn 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotX = resolveSize(mPivotXType, mPivotXValue, width, parentWidth); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPivotY = resolveSize(mPivotYType, mPivotYValue, height, parentHeight); 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 273