package com.xiaomi.xms.sales.widget; import android.app.Activity; import android.support.v4.app.Fragment; import android.view.View; import android.view.ViewGroup; import android.view.animation.AccelerateInterpolator; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationSet; import android.view.animation.DecelerateInterpolator; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.LinearLayout; import com.xiaomi.xms.sales.R; import com.xiaomi.xms.sales.activity.BaseActivity; import com.xiaomi.xms.sales.ui.ComboFragment; import com.xiaomi.xms.sales.ui.MiHomeProductDetailFragment; import com.xiaomi.xms.sales.ui.ProductDetailsFragment; import com.xiaomi.xms.sales.util.ToastUtil; public class AddShoppingCartAnimation { private ViewGroup mAnimMaskLayout; private Activity mActivity; private View mStartView; private View mEndView; private boolean isMiHomeBuy; private boolean isCombo; private ViewGroup rootView; private Fragment mFragment; public AddShoppingCartAnimation(Activity activity, View startView, View endView, Fragment fragment) { mActivity = activity; mStartView = startView; mEndView = endView; mFragment = fragment; mAnimMaskLayout = createAnimLayout(); } public AddShoppingCartAnimation(Activity activity, View startView, View endView, Fragment fragment, boolean isMiHomeBuy, boolean isCombo) { this(activity, startView, endView, fragment); this.isMiHomeBuy = isMiHomeBuy; this.isCombo = isCombo; } /** * @Description: 创建动画层 */ private ViewGroup createAnimLayout() { rootView = (ViewGroup) mActivity.getWindow().getDecorView(); LinearLayout animLayout = new LinearLayout(mActivity); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); animLayout.setLayoutParams(lp); animLayout.setBackgroundResource(android.R.color.transparent); rootView.addView(animLayout); return animLayout; } /** * @Description: 添加视图到动画层 */ private View addViewToAnimLayout(final ViewGroup vg, final View view, int[] location) { int x = location[0]; int y = location[1]; vg.addView(view); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lp.leftMargin = x; lp.topMargin = y; view.setLayoutParams(lp); return view; } public void setAnim() { final ImageView imageView = new ImageView(mActivity); imageView.setImageResource(R.drawable.addcart_ani_pic); Animation zoomScaleAnimation = new ScaleAnimation(1.0f, 2.0f, 1.0f, 2.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); zoomScaleAnimation.setDuration(300); zoomScaleAnimation.setFillAfter(true); Animation startNarrowScaleAnimation = new ScaleAnimation(1.0f, 0.5f, 1.0f, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); startNarrowScaleAnimation.setDuration(100); startNarrowScaleAnimation.setStartOffset(300); startNarrowScaleAnimation.setFillAfter(true); Animation endNarrowScaleAnimation = new ScaleAnimation(1.0f, 0f, 1.0f, 0f, Animation.RELATIVE_TO_SELF, 0.1f, Animation.RELATIVE_TO_SELF, 0.1f); endNarrowScaleAnimation.setDuration(500); endNarrowScaleAnimation.setStartOffset(650); endNarrowScaleAnimation.setFillAfter(true); Animation resilienceScaleAnimation = new ScaleAnimation(1.0f, 1.5f, 1.0f, 1.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); resilienceScaleAnimation.setDuration(100); resilienceScaleAnimation.setStartOffset(400); resilienceScaleAnimation.setInterpolator(new DecelerateInterpolator()); resilienceScaleAnimation.setFillAfter(true); Animation resilienceScaleAnimation1 = new ScaleAnimation(1.0f, 0.67f, 1.0f, 0.67f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); resilienceScaleAnimation1.setDuration(100); resilienceScaleAnimation1.setInterpolator(new AccelerateInterpolator()); resilienceScaleAnimation1.setStartOffset(500); resilienceScaleAnimation1.setFillAfter(true); int[] start_location = new int[2]; mStartView.getLocationInWindow(start_location); // 将组件添加到我们的动画层上 View view = addViewToAnimLayout(mAnimMaskLayout, imageView, start_location); int[] end_location = new int[2]; mEndView.getLocationInWindow(end_location); // 计算位移 int endX = end_location[0] - start_location[0]; int endY = end_location[1] - start_location[1]; Animation translateAnimation = new TranslateAnimation(0, endX, 0, endY);// 移动 translateAnimation.setDuration(500); translateAnimation.setStartOffset(650); AnimationSet mAnimationSet = new AnimationSet(false); // 这块要注意,必须设为false,不然组件动画结束后,不会归位。 mAnimationSet.setFillAfter(false); mAnimationSet.addAnimation(zoomScaleAnimation); mAnimationSet.addAnimation(startNarrowScaleAnimation); mAnimationSet.addAnimation(resilienceScaleAnimation); mAnimationSet.addAnimation(resilienceScaleAnimation1); mAnimationSet.addAnimation(endNarrowScaleAnimation); mAnimationSet.addAnimation(translateAnimation); view.startAnimation(mAnimationSet); mAnimationSet.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationRepeat(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { if (isMiHomeBuy) { ((MiHomeProductDetailFragment) mFragment).onAddShoppingCartFinish(); ((BaseActivity) mActivity).updateShoppingCount(); ((MiHomeProductDetailFragment) mFragment).showGotoCartWindow(); } else if (isCombo) { ((ComboFragment) mFragment).onAddShoppingCartFinish(); ((BaseActivity) mActivity).updateShoppingCount(); ((ComboFragment) mFragment).showGotoCartWindow(); } else { ((ProductDetailsFragment) mFragment).onAddShoppingCartFinish(); ((BaseActivity) mActivity).updateShoppingCount(); ((ProductDetailsFragment) mFragment).showGotoCartWindow(); } ToastUtil.show(mActivity, mActivity.getString(R.string.already_add_shopping_cart)); mAnimMaskLayout.removeViewInLayout(imageView); } }); } }