1 /* 2 * Copyright (C) 2006 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.view.animation; 18 19 import android.content.Context; 20 import android.content.res.TypedArray; 21 import android.util.AttributeSet; 22 23 /** 24 * An animation that controls the position of an object. See the 25 * {@link android.view.animation full package} description for details and 26 * sample code. 27 * 28 */ 29 public class TranslateAnimation extends Animation { 30 private int mFromXType = ABSOLUTE; 31 private int mToXType = ABSOLUTE; 32 33 private int mFromYType = ABSOLUTE; 34 private int mToYType = ABSOLUTE; 35 36 /** @hide */ 37 protected float mFromXValue = 0.0f; 38 /** @hide */ 39 protected float mToXValue = 0.0f; 40 41 /** @hide */ 42 protected float mFromYValue = 0.0f; 43 /** @hide */ 44 protected float mToYValue = 0.0f; 45 46 /** @hide */ 47 protected float mFromXDelta; 48 /** @hide */ 49 protected float mToXDelta; 50 /** @hide */ 51 protected float mFromYDelta; 52 /** @hide */ 53 protected float mToYDelta; 54 55 /** 56 * Constructor used when a TranslateAnimation is loaded from a resource. 57 * 58 * @param context Application context to use 59 * @param attrs Attribute set from which to read values 60 */ TranslateAnimation(Context context, AttributeSet attrs)61 public TranslateAnimation(Context context, AttributeSet attrs) { 62 super(context, attrs); 63 64 TypedArray a = context.obtainStyledAttributes(attrs, 65 com.android.internal.R.styleable.TranslateAnimation); 66 67 Description d = Description.parseValue(a.peekValue( 68 com.android.internal.R.styleable.TranslateAnimation_fromXDelta)); 69 mFromXType = d.type; 70 mFromXValue = d.value; 71 72 d = Description.parseValue(a.peekValue( 73 com.android.internal.R.styleable.TranslateAnimation_toXDelta)); 74 mToXType = d.type; 75 mToXValue = d.value; 76 77 d = Description.parseValue(a.peekValue( 78 com.android.internal.R.styleable.TranslateAnimation_fromYDelta)); 79 mFromYType = d.type; 80 mFromYValue = d.value; 81 82 d = Description.parseValue(a.peekValue( 83 com.android.internal.R.styleable.TranslateAnimation_toYDelta)); 84 mToYType = d.type; 85 mToYValue = d.value; 86 87 a.recycle(); 88 } 89 90 /** 91 * Constructor to use when building a TranslateAnimation from code 92 * 93 * @param fromXDelta Change in X coordinate to apply at the start of the 94 * animation 95 * @param toXDelta Change in X coordinate to apply at the end of the 96 * animation 97 * @param fromYDelta Change in Y coordinate to apply at the start of the 98 * animation 99 * @param toYDelta Change in Y coordinate to apply at the end of the 100 * animation 101 */ TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)102 public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) { 103 mFromXValue = fromXDelta; 104 mToXValue = toXDelta; 105 mFromYValue = fromYDelta; 106 mToYValue = toYDelta; 107 108 mFromXType = ABSOLUTE; 109 mToXType = ABSOLUTE; 110 mFromYType = ABSOLUTE; 111 mToYType = ABSOLUTE; 112 } 113 114 /** 115 * Constructor to use when building a TranslateAnimation from code 116 * 117 * @param fromXType Specifies how fromXValue should be interpreted. One of 118 * Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or 119 * Animation.RELATIVE_TO_PARENT. 120 * @param fromXValue Change in X coordinate to apply at the start of the 121 * animation. This value can either be an absolute number if fromXType 122 * is ABSOLUTE, or a percentage (where 1.0 is 100%) otherwise. 123 * @param toXType Specifies how toXValue should be interpreted. One of 124 * Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or 125 * Animation.RELATIVE_TO_PARENT. 126 * @param toXValue Change in X coordinate to apply at the end of the 127 * animation. This value can either be an absolute number if toXType 128 * is ABSOLUTE, or a percentage (where 1.0 is 100%) otherwise. 129 * @param fromYType Specifies how fromYValue should be interpreted. One of 130 * Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or 131 * Animation.RELATIVE_TO_PARENT. 132 * @param fromYValue Change in Y coordinate to apply at the start of the 133 * animation. This value can either be an absolute number if fromYType 134 * is ABSOLUTE, or a percentage (where 1.0 is 100%) otherwise. 135 * @param toYType Specifies how toYValue should be interpreted. One of 136 * Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF, or 137 * Animation.RELATIVE_TO_PARENT. 138 * @param toYValue Change in Y coordinate to apply at the end of the 139 * animation. This value can either be an absolute number if toYType 140 * is ABSOLUTE, or a percentage (where 1.0 is 100%) otherwise. 141 */ TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)142 public TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, 143 int fromYType, float fromYValue, int toYType, float toYValue) { 144 145 mFromXValue = fromXValue; 146 mToXValue = toXValue; 147 mFromYValue = fromYValue; 148 mToYValue = toYValue; 149 150 mFromXType = fromXType; 151 mToXType = toXType; 152 mFromYType = fromYType; 153 mToYType = toYType; 154 } 155 156 157 @Override applyTransformation(float interpolatedTime, Transformation t)158 protected void applyTransformation(float interpolatedTime, Transformation t) { 159 float dx = mFromXDelta; 160 float dy = mFromYDelta; 161 if (mFromXDelta != mToXDelta) { 162 dx = mFromXDelta + ((mToXDelta - mFromXDelta) * interpolatedTime); 163 } 164 if (mFromYDelta != mToYDelta) { 165 dy = mFromYDelta + ((mToYDelta - mFromYDelta) * interpolatedTime); 166 } 167 t.getMatrix().setTranslate(dx, dy); 168 } 169 170 @Override initialize(int width, int height, int parentWidth, int parentHeight)171 public void initialize(int width, int height, int parentWidth, int parentHeight) { 172 super.initialize(width, height, parentWidth, parentHeight); 173 mFromXDelta = resolveSize(mFromXType, mFromXValue, width, parentWidth); 174 mToXDelta = resolveSize(mToXType, mToXValue, width, parentWidth); 175 mFromYDelta = resolveSize(mFromYType, mFromYValue, height, parentHeight); 176 mToYDelta = resolveSize(mToYType, mToYValue, height, parentHeight); 177 } 178 } 179