仿添加到购物车的动画(Recyclerview条目)

在你的回调方法中把条目中的图片反回来

myAdapter.setNum(new MyAdapter.getnum() {
    @Override
    public void success(int pos, ImageView imgview) {
        
        addCart(imgview);

    }
});

直接使用此方法   img为购物车那个图片,就是目的地,imgview为起始地,layout是布局的根节点

//添加购物车动画实现
public void addCart(ImageView imgview) {
    //图片的宽高
    int width = imgview.getWidth();
    int height = imgview.getHeight();
    //得到起始点坐标
    int parentLoc[] = new int[2];
    layout.getLocationInWindow(parentLoc);
    int startLoc[] = new int[2];
    imgview.getLocationInWindow(startLoc);
    int endLoc[] = new int[2];
    img.getLocationInWindow(endLoc);


    final ImageView goods = new ImageView(getActivity());
    goods.setImageDrawable(imgview.getDrawable());
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(width, height);//这里你也可以自己写宽高
    layout.addView(goods, params);

    float startX = startLoc[0] - parentLoc[0] + imgview.getWidth() / 2;
    float startY = startLoc[1] - parentLoc[1] + imgview.getHeight() / 2;
    float toX = endLoc[0] - parentLoc[0] + img.getWidth() / 3;
    float toY = endLoc[1] - parentLoc[1];


    Path path = new Path();
    path.moveTo(startX, startY);
    path.quadTo((startX + toX) / 2, startY, toX, toY);
    mPathMeasure = new PathMeasure(path, false);

    //属性动画实现
    ValueAnimator valueAnimator = ValueAnimator.ofFloat(0, mPathMeasure.getLength());
    valueAnimator.setDuration(1000);
    // 匀速插值器
    valueAnimator.setInterpolator(new LinearInterpolator());
    valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            float value = (Float) animation.getAnimatedValue();
            // 获取当前点坐标封装到mCurrentPosition
            mPathMeasure.getPosTan(value, mCurrentPosition, null);
            goods.setTranslationX(mCurrentPosition[0]);
            goods.setTranslationY(mCurrentPosition[1]);
        }
    });
    valueAnimator.start();

    //动画的监听
    valueAnimator.addListener(new Animator.AnimatorListener() {
        @Override
        public void onAnimationStart(Animator animation) {

        }

        @Override
        public void onAnimationEnd(Animator animation) {

            layout.removeView(goods);
        }

        @Override
        public void onAnimationCancel(Animator animation) {

        }

        @Override
        public void onAnimationRepeat(Animator animation) {

        }
    });}

是的,这样就大功告成了,如果你出现点击条目没有响应的情况,那么看看你的根布局是否为RelativeLayout,改过来就好了。

猜你喜欢

转载自blog.csdn.net/ZhangXuxiaoqingnian/article/details/82380634