Android 加入购物车动画

1 篇文章 0 订阅
1 篇文章 0 订阅

这个是个简单的加入购物车的动画,可以设置开始的位置和结束的位置。先看效果图:



MainActivity代码如下:

public class MainActivity extends Activity {
    private LinearLayout gouwuche;
    private TextView buyNum_tv;
    private ImageView buyImg;// 这是在界面上跑的小图片
    private ViewGroup anim_mask_layout;//动画层
    private int buyNum = 0;//购买数量
    private ImageView goshoppingcar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        gouwuche = (LinearLayout) findViewById(R.id.jiaru_goshopping);
        goshoppingcar = (ImageView) findViewById(R.id.detail_share);
        buyNum_tv = (TextView) findViewById(R.id.buy_num);
        gouwuche.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int[] start_location = new int[2];// 一个整型数组,用来存储按钮的在屏幕的XY坐标
                view.getLocationInWindow(start_location);// 这是获取购买按钮的在屏幕的XY坐标(这也是动画开始的坐标)
                buyImg = new ImageView(MainActivity.this);// buyImg是动画的图片,我的是一个小球(R.drawable.sign                buyImg.setImageResource(R.drawable.sign);// 设置buyImg的图片
                setAnim(buyImg, start_location);// 开始执行动画
            }
        });
    }

    private void setAnim(final View v, int[] start_location) {
        anim_mask_layout = null;
        anim_mask_layout = createAnimLayout();
        anim_mask_layout.addView(v);//把动画小球添加到动画层
        final View view = addViewToAnimLayout(anim_mask_layout, v,
                start_location);
        int[] end_location = new int[2];// 这是用来存储动画结束位置的XY坐标
        goshoppingcar.getLocationInWindow(end_location);// shopCart是那个购物车


        // 计算位移
        int endX = 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,
                end_location[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(800);// 动画的执行时间
        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);
                buyNum++;//让购买数量加1
                buyNum_tv.setText(buyNum + "");//
                buyNum_tv.setVisibility(View.VISIBLE);
            }
        });

    }

    /**
     * @param
     * @return void
     * @throws
     * @Description: 创建动画层
     */
    private ViewGroup createAnimLayout() {
        ViewGroup rootView = (ViewGroup) this.getWindow().getDecorView();
        LinearLayout animLayout = new LinearLayout(this);
        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;
    }

    private 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;
    }
}

activity_main布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="beautifu.com.amincar.MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#fae6c5">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="加入购物车动画"
            android:textColor="#875D34"
            android:textSize="24sp" />

        <ImageView
            android:id="@+id/detail_share"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:scaleType="fitXY"
            android:src="@drawable/shopping_car" />

        <TextView
            android:id="@+id/buy_num"
            android:layout_width="15dp"
            android:layout_height="15dp"
            android:layout_alignParentRight="true"
            android:layout_marginTop="5dp"
            android:background="@drawable/gowu_bg"
            android:gravity="center"
            android:text="1"
            android:textColor="#fff"
            android:textSize="12sp"
            android:visibility="gone" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:gravity="center"
        android:orientation="horizontal">

        <LinearLayout
            android:id="@+id/jiaru_goshopping"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="2"
            android:background="#FF7F24"
            android:clickable="true"
            android:gravity="center"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/jiaru_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="加入购物车"
                android:textColor="#fff"
                android:textSize="18sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="3">

            <Button
                android:id="@+id/lijiyuyue_commdetails"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="#ef7970"
                android:text="立即购买"
                android:textColor="#fff" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

下面附上我的源码:


点击下载源码


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值