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; 20e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.content.res.Resources; 21e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.content.res.Resources.Theme; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 25e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport com.android.internal.R; 26c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckimport com.android.internal.view.animation.HasNativeInterpolator; 27c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckimport com.android.internal.view.animation.NativeInterpolatorFactory; 28c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reckimport com.android.internal.view.animation.NativeInterpolatorFactoryHelper; 29c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 31e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * An interpolator where the rate of change starts out slowly and 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and then accelerates. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck@HasNativeInterpolator 36d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyarpublic class AccelerateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { 378b0662878eae69ab62e859b07165f086ea65cad5Jean-Baptiste Queru private final float mFactor; 388b0662878eae69ab62e859b07165f086ea65cad5Jean-Baptiste Queru private final double mDoubleFactor; 398b0662878eae69ab62e859b07165f086ea65cad5Jean-Baptiste Queru 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AccelerateInterpolator() { 418b0662878eae69ab62e859b07165f086ea65cad5Jean-Baptiste Queru mFactor = 1.0f; 428b0662878eae69ab62e859b07165f086ea65cad5Jean-Baptiste Queru mDoubleFactor = 2.0; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 44e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor 47e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param factor Degree to which the animation should be eased. Seting 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * factor to 1.0f produces a y=x^2 parabola. Increasing factor above 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1.0f exaggerates the ease-in effect (i.e., it starts even 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * slower and ends evens faster) 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AccelerateInterpolator(float factor) { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFactor = factor; 558b0662878eae69ab62e859b07165f086ea65cad5Jean-Baptiste Queru mDoubleFactor = 2 * mFactor; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 57e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public AccelerateInterpolator(Context context, AttributeSet attrs) { 59e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui this(context.getResources(), context.getTheme(), attrs); 60e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui } 61e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 62e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui /** @hide */ 63e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui public AccelerateInterpolator(Resources res, Theme theme, AttributeSet attrs) { 64e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui TypedArray a; 65e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui if (theme != null) { 66e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui a = theme.obtainStyledAttributes(attrs, R.styleable.AccelerateInterpolator, 0, 0); 67e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui } else { 68e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui a = res.obtainAttributes(attrs, R.styleable.AccelerateInterpolator); 69e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui } 70e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 71e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui mFactor = a.getFloat(R.styleable.AccelerateInterpolator_factor, 1.0f); 728b0662878eae69ab62e859b07165f086ea65cad5Jean-Baptiste Queru mDoubleFactor = 2 * mFactor; 73d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar setChangingConfiguration(a.getChangingConfigurations()); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 76e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getInterpolation(float input) { 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mFactor == 1.0f) { 798b0662878eae69ab62e859b07165f086ea65cad5Jean-Baptiste Queru return input * input; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 818b0662878eae69ab62e859b07165f086ea65cad5Jean-Baptiste Queru return (float)Math.pow(input, mDoubleFactor); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 84c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 85c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck /** @hide */ 86c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck @Override 87c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck public long createNativeInterpolator() { 88c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return NativeInterpolatorFactoryHelper.createAccelerateInterpolator(mFactor); 89c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 91