购物车添加动画工具类

public class AnimUtils {
    /**
     * 运动的控件
     */
    public static Bitmap getAddDrawBitMap(Context context) {
        ImageView text = new ImageView(context);
        // 运动的控件,样式可以自定义
        text.setBackgroundResource(R.drawable.ic_add_food);
        return convertViewToBitmap(text);
    }


    /**
     * 创建动画层
     */
    private static ViewGroup createAnimLayout(Context context) {
        ViewGroup rootView = (ViewGroup) ((Activity) context).getWindow().getDecorView();
        LinearLayout animLayout = new LinearLayout(context);
        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;
    }

    private static View addViewToAnimLayout(final ViewGroup vg, final View view, int[] location) {
        int x = location[0];
        int y = location[1];
        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;
    }

    /**
     * 开始执行动画
     * @param context       context
     * @param v             运动的图片
     * @param startView  动画开始位置的控件
     * @param view2      动画结束位置的控件
     */
    public static void setAnim(Context context, final View v, View startView, ImageView view2) {

        ViewGroup anim_mask_layout = createAnimLayout(context);
        // 把动画小球添加到动画层
        anim_mask_layout.addView(v);
        // 一个整型数组,用来存储按钮的在屏幕的X、Y坐标
        int[] start_location = new int[2];
        // 这是获取购买按钮的在屏幕的X、Y坐标(这也是动画开始的坐标)
        startView.getLocationInWindow(start_location);

        View view = addViewToAnimLayout(anim_mask_layout, v, start_location);
        // 这是用来存储动画结束位置的X、Y坐标
        int[] end_location = new int[2];
        // rl_gouwuche是小球运动的终点 一般是购物车图标
        view2.getLocationInWindow(end_location);

        // 计算位移
//        int endX = 0 - start_location[0] + 40;// 动画位移的X坐标
        int endX = end_location[0] - start_location[0] + 40;// 动画位移的X坐标
        int endY = end_location[1] - start_location[1];// 动画位移的y坐标
        TranslateAnimation translateAnimationX = new TranslateAnimation(0, endX, 0, 0);
        translateAnimationX.setInterpolator(new LinearInterpolator());
        translateAnimationX.setRepeatCount(0);// 动画重复执行的次数
        translateAnimationX.setFillAfter(true);

        TranslateAnimation translateAnimationY = new TranslateAnimation(0, 0, 0, endY);
        translateAnimationY.setInterpolator(new AccelerateInterpolator());
        translateAnimationY.setRepeatCount(0);// 动画重复执行的次数
        translateAnimationX.setFillAfter(true);

        AnimationSet set = new AnimationSet(false);
        set.setFillAfter(false);
        set.addAnimation(translateAnimationY);
        set.addAnimation(translateAnimationX);
        set.setDuration(400);// 动画的执行时间
        view.startAnimation(set);
        // 动画监听事件
        set.setAnimationListener(new Animation.AnimationListener() {
            // 动画的开始
            @Override
            public void onAnimationStart(Animation animation) {
                v.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub
            }

            // 动画的结束
            @Override
            public void onAnimationEnd(Animation animation) {
                v.setVisibility(View.GONE);
            }
        });

    }

    /**
     * 将定义的view装换成 bitmap格式
     *
     */
    private static Bitmap convertViewToBitmap(View view) {
        view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        view.buildDrawingCache();
        Bitmap bitmap = view.getDrawingCache();
        return bitmap;
    }

    /**
     *  开始执行动画
     *  首页添加传入QMUITabSegment类型的方法(自己项目中用到的)
     */
    public static void setAnim(Context context, final View v, View startView, QMUITabSegment tab) {
        ViewGroup  anim_mask_layout = null;
         anim_mask_layout = createAnimLayout(context);
        // 把动画小球添加到动画层
        anim_mask_layout.addView(v);
        // 一个整型数组,用来存储按钮的在屏幕的X、Y坐标
        int[] start_location = new int[2];
        // 这是获取购买按钮的在屏幕的X、Y坐标(这也是动画开始的坐标)
        startView.getLocationInWindow(start_location);

        View view = addViewToAnimLayout(anim_mask_layout, v, start_location);
        // 这是用来存储动画结束位置的X、Y坐标
        int[] end_location = new int[2];
        // rl_gouwuche是小球运动的终点 一般是购物车图标
        tab.getLocationInWindow(end_location);
        System.out.println("start_location = " + Arrays.toString(start_location));
        System.out.println("end_location = " + Arrays.toString(end_location));

        // 计算位移
        int endX = tab.getWidth()/2-start_location[0];// 动画位移的X坐标
        int endY = end_location[1] - start_location[1];// 动画位移的y坐标
        TranslateAnimation translateAnimationX = new TranslateAnimation(0, endX, 0, 0);
        translateAnimationX.setInterpolator(new LinearInterpolator());
        translateAnimationX.setRepeatCount(0);// 动画重复执行的次数
        translateAnimationX.setFillAfter(true);

        TranslateAnimation translateAnimationY = new TranslateAnimation(0, 0, 0, endY);
        translateAnimationY.setInterpolator(new AccelerateInterpolator());
        translateAnimationY.setRepeatCount(0);// 动画重复执行的次数
        translateAnimationX.setFillAfter(true);

        AnimationSet set = new AnimationSet(false);
        set.setFillAfter(false);
        set.addAnimation(translateAnimationY);
        set.addAnimation(translateAnimationX);
        set.setDuration(400);// 动画的执行时间
        view.startAnimation(set);
        // 动画监听事件
        set.setAnimationListener(new Animation.AnimationListener() {
            // 动画的开始
            @Override
            public void onAnimationStart(Animation animation) {
                v.setVisibility(View.VISIBLE);
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub
            }

            // 动画的结束
            @Override
            public void onAnimationEnd(Animation animation) {
                v.setVisibility(View.GONE);
            }
        });

    }
}

 

使用的时候:

ImageView imageView = new ImageView(this);
// 设置buyImg的图片
imageView.setImageBitmap(AnimUtils.getAddDrawBitMap(RecipeDetailActicity.this));
// 开始执行动画
AnimUtils.setAnim(RecipeDetailActicity.this, imageView, addIv, selectIv);//替换成自己相应的控件
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值