package io.github.mayubao.kuaichuan.utils;
import android.app.Activity;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.LinearInterpolator;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
/**
* 动画的工具类
*
* Created by mayubao on 2016/4/21.
* Contact me 345269374@qq.com
*/
public class AnimationUtils {
/**
* 创建动画层
* @param activity
* @return
*/
public static ViewGroup createAnimLayout(Activity activity) {
ViewGroup rootView = (ViewGroup) activity.getWindow().getDecorView();
LinearLayout animLayout = new LinearLayout(activity);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
animLayout.setLayoutParams(lp);
// animLayout.setId(Integer.MAX_VALUE);
animLayout.setBackgroundResource(android.R.color.transparent);
rootView.addView(animLayout);
return animLayout;
}
/**
* 添加任务动画
*
* @param activity
* @param startView 起始view
* @param targetView 目标view
*/
public static void setAddTaskAnimation(Activity activity, View startView, View targetView, final AddTaskAnimationListener listener){
//1.创建遮罩动画层
ViewGroup animMaskLayout = createAnimLayout(activity);
final ImageView imageView = new ImageView(activity);
animMaskLayout.addView(imageView);
//2.创建Animation
int[] startLocArray = new int[2];
int[] endLocArray = new int[2];
startView.getLocationInWindow(startLocArray);
targetView.getLocationInWindow(endLocArray);
//3.设置遮罩层ImageView的LayoutParams
ViewGroup.LayoutParams startViewLayoutParams = startView.getLayoutParams();
ViewGroup.LayoutParams targetViewLayoutParams = targetView.getLayoutParams();
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
startViewLayoutParams.width,
startViewLayoutParams.height);
lp.leftMargin = startLocArray[0];
lp.topMargin = startLocArray[1];
imageView.setLayoutParams(lp);
// imageView.setImageDrawable(activity.getResources().getDrawable(R.mipmap.ic_launcher));
//设置遮罩层ImageView的背景
if(startView != null && (startView instanceof ImageView)){
ImageView iv = (ImageView) startView;
imageView.setImageDrawable(iv.getDrawable() == null ? null : iv.getDrawable());
}
// 计算位移
int xOffset = endLocArray[0] - startLocArray[0] + targetViewLayoutParams.width / 2;// 动画位移的X坐标
int yOffset = endLocArray[1] - startLocArray[1] + targetViewLayoutParams.height / 2;// 动画位移的y坐标
TranslateAnimation translateAnimationX = new TranslateAnimation(0,
xOffset, 0, 0);
translateAnimationX.setInterpolator(new LinearInterpolator());
translateAnimationX.setRepeatCount(0);// 动画重复执行的次数
translateAnimationX.setFillAfter(true);
TranslateAnimation translateAnimationY = new TranslateAnimation(0, 0,
0, yOffset);
translateAnimationY.setInterpolator(new LinearInterpolator());
translateAnimationY.setRepeatCount(0);// 动画重复执行的次数
translateAnimationX.setFillAfter(true);
ScaleAnimation scaleAnimation = new ScaleAnimation(
1.0f, 0.2f, 1.0f, 0.2f);
scaleAnimation.setInterpolator(new LinearInterpolator());
scaleAnimation.setFillAfter(true);
AnimationSet set = new AnimationSet(false);
set.setFillAfter(false);
set.addAnimation(scaleAnimation);
set.addAnimation(translateAnimationY);
set.addAnimation(translateAnimationX);
set.setDuration(800);// 动画的执行时间
set.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
if (listener != null) {
listener.onAnimationStart(animation);
}
}
@Override
public void onAnimationEnd(Animation animation) {
imageView.setVisibility(View.GONE);
if (listener != null) {
listener.onAnimationEnd(animation);
}
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
imageView.startAnimation(set);
}
/**
* 购物车动画的监听
*/
public interface AddTaskAnimationListener {
void onAnimationStart(Animation animation);
void onAnimationEnd(Animation animation);
}
}