android飞入购物车效果,Android实现购物车添加物品的动画效果

本文介绍了如何在Android商城应用中实现加入购物车功能,包括抛物线动画效果的添加。涉及到的知识点有沉浸式状态栏、单位精度计算和List的迭代操作。代码示例展示了如何在点击商品时启动动画,并更新商品数量和总价。当购物车为空或不为空时,分别显示不同的提示信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

效果:

78c995d79be73592b048206d61e0b79e.gif

开发环境: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 list;

private List 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 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 + "");

}

}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值