19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 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; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 22e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.content.res.Resources.Theme; 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/** 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Repeats the animation for a specified number of cycles. The 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rate of change follows a sinusoidal pattern. 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 35c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck@HasNativeInterpolator 36d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyarpublic class CycleInterpolator extends BaseInterpolator implements NativeInterpolatorFactory { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CycleInterpolator(float cycles) { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCycles = cycles; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 40e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public CycleInterpolator(Context context, AttributeSet attrs) { 42e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui this(context.getResources(), context.getTheme(), attrs); 43e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui } 44e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 45e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui /** @hide */ 46e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui public CycleInterpolator(Resources resources, Theme theme, AttributeSet attrs) { 47e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui TypedArray a; 48e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui if (theme != null) { 49e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui a = theme.obtainStyledAttributes(attrs, R.styleable.CycleInterpolator, 0, 0); 50e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui } else { 51e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui a = resources.obtainAttributes(attrs, R.styleable.CycleInterpolator); 52e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui } 53e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 54e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui mCycles = a.getFloat(R.styleable.CycleInterpolator_cycles, 1.0f); 55d422dc358f0100106dc07d7b903201eb9b043b11Yigit Boyar setChangingConfiguration(a.getChangingConfigurations()); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 58e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public float getInterpolation(float input) { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (float)(Math.sin(2 * mCycles * Math.PI * input)); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 62e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mCycles; 64c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck 65c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck /** @hide */ 66c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck @Override 67c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck public long createNativeInterpolator() { 68c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck return NativeInterpolatorFactoryHelper.createCycleInterpolator(mCycles); 69c8ac775659fd252ce2cc9a61837c170ff70f0a1aJohn Reck } 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 71