1 /* 2 * Copyright 2013 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 18 19 20 package com.example.android.batchstepsensor.cardstream; 21 22 import android.animation.ObjectAnimator; 23 import android.animation.PropertyValuesHolder; 24 import android.annotation.TargetApi; 25 import android.content.Context; 26 import android.graphics.Point; 27 import android.os.Build; 28 import android.view.View; 29 import android.view.WindowManager; 30 import android.view.animation.BounceInterpolator; 31 32 class DefaultCardStreamAnimator extends CardStreamAnimator { 33 34 @TargetApi(Build.VERSION_CODES.HONEYCOMB) 35 @Override 36 public ObjectAnimator getDisappearingAnimator(Context context){ 37 38 ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(new Object(), 39 PropertyValuesHolder.ofFloat("alpha", 1.f, 0.f), 40 PropertyValuesHolder.ofFloat("scaleX", 1.f, 0.f), 41 PropertyValuesHolder.ofFloat("scaleY", 1.f, 0.f), 42 PropertyValuesHolder.ofFloat("rotation", 0.f, 270.f)); 43 44 animator.setDuration((long) (200 * mSpeedFactor)); 45 return animator; 46 } 47 48 @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 49 @Override 50 public ObjectAnimator getAppearingAnimator(Context context){ 51 52 final Point outPoint = new Point(); 53 WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 54 wm.getDefaultDisplay().getSize(outPoint); 55 56 ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(new Object(), 57 PropertyValuesHolder.ofFloat("alpha", 0.f, 1.f), 58 PropertyValuesHolder.ofFloat("translationY", outPoint.y / 2.f, 0.f), 59 PropertyValuesHolder.ofFloat("rotation", -45.f, 0.f)); 60 61 animator.setDuration((long) (200 * mSpeedFactor)); 62 return animator; 63 } 64 65 @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 66 @Override 67 public ObjectAnimator getInitalAnimator(Context context){ 68 69 ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(new Object(), 70 PropertyValuesHolder.ofFloat("alpha", 0.5f, 1.f), 71 PropertyValuesHolder.ofFloat("rotation", 60.f, 0.f)); 72 73 animator.setDuration((long) (200 * mSpeedFactor)); 74 return animator; 75 } 76 77 @TargetApi(Build.VERSION_CODES.HONEYCOMB) 78 @Override 79 public ObjectAnimator getSwipeInAnimator(View view, float deltaX, float deltaY){ 80 81 float deltaXAbs = Math.abs(deltaX); 82 83 float fractionCovered = 1.f - (deltaXAbs / view.getWidth()); 84 long duration = Math.abs((int) ((1 - fractionCovered) * 200 * mSpeedFactor)); 85 86 // Animate position and alpha of swiped item 87 88 ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(view, 89 PropertyValuesHolder.ofFloat("alpha", 1.f), 90 PropertyValuesHolder.ofFloat("translationX", 0.f), 91 PropertyValuesHolder.ofFloat("rotationY", 0.f)); 92 93 animator.setDuration(duration).setInterpolator(new BounceInterpolator()); 94 95 return animator; 96 } 97 98 @TargetApi(Build.VERSION_CODES.HONEYCOMB) 99 @Override 100 public ObjectAnimator getSwipeOutAnimator(View view, float deltaX, float deltaY){ 101 102 float endX; 103 float endRotationY; 104 105 float deltaXAbs = Math.abs(deltaX); 106 107 float fractionCovered = 1.f - (deltaXAbs / view.getWidth()); 108 long duration = Math.abs((int) ((1 - fractionCovered) * 200 * mSpeedFactor)); 109 110 endX = deltaX < 0 ? -view.getWidth() : view.getWidth(); 111 if (deltaX > 0) 112 endRotationY = -15.f; 113 else 114 endRotationY = 15.f; 115 116 // Animate position and alpha of swiped item 117 return ObjectAnimator.ofPropertyValuesHolder(view, 118 PropertyValuesHolder.ofFloat("alpha", 0.f), 119 PropertyValuesHolder.ofFloat("translationX", endX), 120 PropertyValuesHolder.ofFloat("rotationY", endRotationY)).setDuration(duration); 121 122 } 123 124 }