Skip to content

当我们写商城类的项目的时候,一般都会有加入购物车的功能,加入购物车的时候会有一些抛物线动画,最近做到这个功能,借助别人的demo写了一个。

seastoneard/ShoppingCartAnimation

Repository files navigation

ShoppingCartAnimation

前言当我们写商城类的项目的时候,一般都会有加入购物车的功能,加入购物车的时候会有一些抛物线动画,最近做到这个功能,借助别人的demo写了一个。


效果:



开发环境:AndroidStudio2.1.2+gradle-2.10


涉及知识:1.沉浸式状态栏,2.单位精度计算(价格),3.List之Iterator。


部分代码:

public class MainActivity extends AppCompatActivity implements FoodAdapter.FoodActionCallback {
private ListView listView;
private TextView goods_all_pricetv;
private TextView good_numtv;
private List<FoodModel> list;
private List<FoodModel> selectList = new ArrayList<>();
private FoodAdapter adapter = null;

@Override
protected void onCreate(@Nullable final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //沉浸式状态栏
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        //透明状态栏
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        //透明导航栏
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    }
    listView = (ListView) findViewById(R.id.listView);
    goods_all_pricetv = (TextView) findViewById(R.id.goods_all_pricetv);
    good_numtv = (TextView) findViewById(R.id.good_numtv);
    findViewById(R.id.goods_submit_tv).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             if (null != selectList && selectList.size() > 0) {
                Toast.makeText(MainActivity.this, "你一共加入购物车" + good_numtv.getText() +
                        "份商品,总价格为:" + goods_all_pricetv.getText(), Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(MainActivity.this, "你的购物车为空", Toast.LENGTH_SHORT).show();
            }

        }
    });

    initData();
}

private void initData() {
    list = AppConfig.factoryFoods();
    adapter = new FoodAdapter(this, list, this);
    listView.setAdapter(adapter);
}

//添加商品动画
@Override
public void addAction(View view, int item) {
    ShoppingCartAnimationView shoppingCartAnimationView = new ShoppingCartAnimationView(this);
    int position[] = new int[2];
    view.getLocationInWindow(position);
    shoppingCartAnimationView.setStartPosition(new Point(position[0], position[1]));
    ViewGroup rootView = (ViewGroup) this.getWindow().getDecorView();
    rootView.addView(shoppingCartAnimationView);
    int endPosition[] = new int[2];
    good_numtv.getLocationInWindow(endPosition);
    shoppingCartAnimationView.setEndPosition(new Point(endPosition[0], endPosition[1]));
    shoppingCartAnimationView.startBeizerAnimation();
    FoodModel model = list.get(item);
    model.setNum(model.getNum() + 1);
    adapter.notifyDataSetChanged();
    calculatePrice();

}

//减少商品
@Override
public void reduceGood(int position) {
    FoodModel model = list.get(position);
    model.setNum(model.getNum() - 1);
    adapter.notifyDataSetChanged();
    calculatePrice();
}

//购物车份数+总价格计算
private void calculatePrice() {
   selectList.clear();
    double price = 0;
    int num = 0;
    Iterator<FoodModel> iterator = list.iterator();
    while (iterator.hasNext()) {
        FoodModel model = iterator.next();
        if (model.getNum() != 0) {
            selectList.add(model);
            price += model.getPrice() * model.getNum();
            num += model.getNum();
        }
    }
    goods_all_pricetv.setText("¥" + adapter.priceResult(price) + "元");
    good_numtv.setText(num + "");
}

}


About

当我们写商城类的项目的时候,一般都会有加入购物车的功能,加入购物车的时候会有一些抛物线动画,最近做到这个功能,借助别人的demo写了一个。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages