一个简单的方法实现购物车小球动画

只有代码,仔细看看,实现起来其实很简单

 /**
     * 执行添加商品动画
     *
     * @param goodsImg 动画小球
     * @param position 所在列表中的位置
     */
    private void addGoodsToCart(ImageView goodsImg, final int position) {
        // 创造出执行动画的ImageView (这个图片就是执行动画的图片,从开始位置出发,经过一个抛物线,移动到购物车里)
        final ImageView ivAdd = new ImageView(BuyerMerchantsHomeActivity.this);
        ivAdd.setImageDrawable(goodsImg.getDrawable());
        //获取动画小球所在父容器中的位置(recyclerView 的父容器)
        int startLoc[] = new int[2];
        goodsImg.getLocationInWindow(startLoc);

        //设置执行动画的ImageView 的大小
        RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(64, 64);
        //获取执行动画的RelativeLayout 在父容器中的位置
        int[] parentLocation = new int[2];
        rlContent.getLocationInWindow(parentLocation);
        //设置动画imageView 在RelativeLayout中的起始位置
        params.setMargins(startLoc[0], startLoc[1] - parentLocation[1], 0, 0);
        rlContent.addView(ivAdd, params);

        //利用属性动画对小球同时作x、y轴位移(x轴减速,y轴加速,合成抛物线)
        ObjectAnimator animator = ObjectAnimator.ofFloat(ivAdd, "translationX", endLoc[0] - startLoc[0] + SizeUtils.dp2px(BuyerMerchantsHomeActivity.this, 24));
        animator.setInterpolator(new DecelerateInterpolator());
        ObjectAnimator animator1 = ObjectAnimator.ofFloat(ivAdd, "translationY", endLoc[1] - startLoc[1]);
        animator1.setInterpolator(new AccelerateDecelerateInterpolator());
        AnimatorSet set = new AnimatorSet();
        set.setDuration(500);
        set.playTogether(animator, animator1);
        set.start();
        //动画完成时进行监听
        set.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                rlContent.removeView(ivAdd);
                count++;
                total = MyMathUtil.add(total, goods.get(position - 1).getPrice());
                badgeView.setBadgeNumber(count);
                tvTotal.setText("¥" + String.format("%.2f", total));
//                EventBus.getDefault().post(new AddMsg(true, buyerTypeItems.get(position).getBusItems().get(childPosition)));
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值