| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.view.animation; |
| |
| import android.content.Context; |
| import android.graphics.animation.HasNativeInterpolator; |
| import android.graphics.animation.NativeInterpolator; |
| import android.graphics.animation.NativeInterpolatorFactory; |
| import android.util.AttributeSet; |
| |
| /** |
| * An interpolator where the change bounces at the end. |
| */ |
| @HasNativeInterpolator |
| public class BounceInterpolator extends BaseInterpolator implements NativeInterpolator { |
| public BounceInterpolator() { |
| } |
| |
| @SuppressWarnings({"UnusedDeclaration"}) |
| public BounceInterpolator(Context context, AttributeSet attrs) { |
| } |
| |
| private static float bounce(float t) { |
| return t * t * 8.0f; |
| } |
| |
| public float getInterpolation(float t) { |
| // _b(t) = t * t * 8 |
| // bs(t) = _b(t) for t < 0.3535 |
| // bs(t) = _b(t - 0.54719) + 0.7 for t < 0.7408 |
| // bs(t) = _b(t - 0.8526) + 0.9 for t < 0.9644 |
| // bs(t) = _b(t - 1.0435) + 0.95 for t <= 1.0 |
| // b(t) = bs(t * 1.1226) |
| t *= 1.1226f; |
| if (t < 0.3535f) return bounce(t); |
| else if (t < 0.7408f) return bounce(t - 0.54719f) + 0.7f; |
| else if (t < 0.9644f) return bounce(t - 0.8526f) + 0.9f; |
| else return bounce(t - 1.0435f) + 0.95f; |
| } |
| |
| /** @hide */ |
| @Override |
| public long createNativeInterpolator() { |
| return NativeInterpolatorFactory.createBounceInterpolator(); |
| } |
| } |