近期项目中有点餐功能要求中午和晚上一起点餐,中午和晚上的餐品加载的都是一样的有炒菜和面点,
也可设置每个菜品的起点数量,默认起点数量都是1,项目写的比较急,后期会优化代码数量,增加了布局弹出方式,可以用alert弹窗,也可以切换PopupWindows样式弹出
废话不多说直接上代码

activity页面代码:
public class AnimationActivity extends BaseActivity implements View.OnClickListener, OnAlertCallBack, OnWindoowCallBacks {
private ListView recyclerView;
private ImageView iv_pay_anim;

private List<FoodName> list;
private List<FoodName> lists;
private TextView zhong, wan;
private TextView chao, mian;
private MyAnimationAdapter adapter;
private LinearLayoutManager linearLayoutManager;
private FoodNameBean foodNameBean;
private FoodNameBean foodNameBeans;
private FoodNameBean foodNameBeanss;
private FoodNameBean foodNameBeansss;
private List<FoodNameBean> foodNameBeanList = new ArrayList<>();
private FoodNameLimit foodNameLimit = new FoodNameLimit();
private Reduce reduce = new Reduce();//减法计算
private Add add = new Add();//加法计算
private Summary summary = new Summary();//代理类@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.animation);recyclerView = (ListView) findViewById(R.id.anim_rv);iv_pay_anim = (ImageView) findViewById(R.id.iv_pay_anim);zhong = (TextView) findViewById(R.id.zhong);wan = (TextView) findViewById(R.id.wan);chao = (TextView) findViewById(R.id.chao);mian = (TextView) findViewById(R.id.mian);setText();setOnClick();setFoodNameLimits();
}/*** 设置的起点菜品和数量也可不设置默认都是一个*/
private void setFoodNameLimits() {foodNameBean = new FoodNameBean("包子", 3);foodNameBeans = new FoodNameBean("面条", 2);foodNameBeanss = new FoodNameBean("饺子", 4);foodNameBeansss = new FoodNameBean("面包", 5);

// foodNameBeanList.add(foodNameBean);
// foodNameBeanList.add(foodNameBeans);
// foodNameBeanList.add(foodNameBeanss);
// foodNameBeanList.add(foodNameBeansss);
}

/*** 初始化Adapter*/
private void setText() {DataBean dataBean = new DataBean();list = dataBean.getStirFry();lists = dataBean.getNoodleSport();adapter = new MyAnimationAdapter(this, list);recyclerView.setAdapter(adapter);
}private void setOnClick() {zhong.setOnClickListener(this);wan.setOnClickListener(this);chao.setOnClickListener(this);mian.setOnClickListener(this);iv_pay_anim.setOnClickListener(this);
}private List<AllDataBean> listData = new LinkedList<>();public void playAnimation(int[] position, TextView textView, int positions, LinearLayout linearLayout, TextView textViews, Integer money) {setNumber(textView, linearLayout, positions, textViews, start, positionesState, money);final ImageView imageView = new ImageView(this);imageView.setImageResource(R.drawable.ic_launcher);imageView.setLayoutParams(new LinearLayout.LayoutParams(70, 70));ViewGroup viewGroup = (ViewGroup) this.getWindow().getDecorView();viewGroup.addView(imageView);int[] des = new int[2];iv_pay_anim.getLocationInWindow(des);/*动画开始位置,也就是物品的位置;动画结束的位置,也就是购物车的位置 */Point startPosition = new Point(position[0], position[1]);Point endPosition = new Point(des[0] + iv_pay_anim.getWidth() / 2 - 50, des[1] + iv_pay_anim.getHeight() / 2);int pointX = (startPosition.x + endPosition.x) / 2 - 100;int pointY = startPosition.y - 400;Point controllPoint = new Point(pointX, pointY);/** 属性动画,依靠TypeEvaluator来实现动画效果,其中位移,缩放,渐变,旋转都是可以直接使用* 这里是自定义了TypeEvaluator, 我们通过point记录运动的轨迹,然后,物品随着轨迹运动,* 一旦轨迹发生变化,就会调用addUpdateListener这个方法,我们不断的获取新的位置,是物品移动* */ValueAnimator valueAnimator = ValueAnimator.ofObject(new BizierEvaluator2(controllPoint), startPosition, endPosition);valueAnimator.start();valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {@Overridepublic void onAnimationUpdate(ValueAnimator valueAnimator) {Point point = (Point) valueAnimator.getAnimatedValue();imageView.setX(point.x);imageView.setY(point.y);}});/*** 动画结束,移除掉小圆圈*/valueAnimator.addListener(new AnimatorListenerAdapter() {@Overridepublic void onAnimationEnd(Animator animation) {super.onAnimationEnd(animation);ViewGroup rootView = (ViewGroup) AnimationActivity.this.getWindow().getDecorView();rootView.removeView(imageView);}});
}private int start = 1, positionesState = 1;//start 时间段的状态 positiones菜品的状态
private int reduceState;
private Integer numbers;public void noPlayAnimation(TextView textView, int position, LinearLayout linearLayout, TextView textViews, Integer state, Integer positionesStates, int bottomAdapterposition, Integer money) {Integer number = Integer.parseInt(textView.getText().toString());if (number == 0) {Toast.makeText(this, "数量已经是0不能在减", Toast.LENGTH_SHORT).show();return;}int allNumber = 0;/*** 判断是否设置了起点类*///计算的限制if (foodNameBeanList.size() > 0) {numbers = startLimit(false, number, textViews.getText().toString());} else {numbers = 1;}summary.setPrices(reduce);allNumber = summary.calculateNumber(numbers, number);reduceState = summary.calculateState(numbers, number);if (allNumber == 0) {AlphaAnimation aa = new AlphaAnimation(1f, 0);aa.setDuration(1000);linearLayout.startAnimation(aa);linearLayout.setVisibility(View.INVISIBLE);textView.setText(allNumber + "");//删除并更新数据delect(position, allNumber, textViews.getText().toString(), state, positionesStates, money);//删除弹窗中的信息if (state != null) {if (listData.size() > 0) {listData.remove(bottomAdapterposition);bottomAdapter.setListData(listData);bottomAdapter.notifyDataSetChanged();}setStatrs(start, positionesState);adapter.notifyDataSetChanged();return;}}textView.setText(allNumber + "");//第二种解决方法delect(position, allNumber, textViews.getText().toString(), state, positionesStates, money);
}/*** 刷新数据** @param positions* @param allNumber* @param name* @param stare* @param positionesStates*/
private void delect(int positions, int allNumber, String name, Integer stare, Integer positionesStates, Integer money) {if (stare == null) {if (allNumber == 0) {for (int s = 0; s < listData.size(); s++) {if (listData.get(s).getNumber() == 0) {listData.remove(s);return;}}}setTwoList(positions, allNumber, name, start, positionesState, money, 2);} else {setTwoList(positions, allNumber, name, stare, positionesStates, money, 2);setStatrs(start, positionesState);adapter.notifyDataSetChanged();}
}public void playAnimation(int[] position, TextView textView, int positions, LinearLayout linearLayout, TextView textViews, int state, int positionesState, Integer money) {setNumber(textView, linearLayout, positions, textViews, state, positionesState, money);
}/*** 计算加数量*/
private Integer moneys = 0;private void setNumber(TextView textView, LinearLayout linearLayout, int positions, TextView textViews, int state, int positionesState, Integer money) {moneys = 0;Integer allNumber = null;Integer number = Integer.parseInt(textView.getText().toString());//起点的限制if (foodNameBeanList.size() > 0) {numbers = startLimit(true, number, textViews.getText().toString());} else {numbers = 1;}/***优化算法*/summary.setPrices(add);allNumber = summary.calculateNumber(numbers, number);moneys = summary.calculatePriceMoney(money, numbers);textView.setText(allNumber + "");if (allNumber == 1) {AlphaAnimation aa = new AlphaAnimation(0, 1f);aa.setDuration(1000);linearLayout.startAnimation(aa);linearLayout.setVisibility(View.VISIBLE);}//第二种解决方法setTwoList(positions, allNumber, textViews.getText().toString(), state, positionesState, money, 1);if (state != start) {adapter.notifyDataSetChanged();} else {setStatrs(state, positionesState);adapter.notifyDataSetChanged();}
}private int forState;
private AlertStyle alertStyle = new AlertStyle();/*** 是否有限制*/
private Integer startLimit(boolean state, Integer number, String name) {return foodNameLimit.setState(state).setNumber(number).setFoodName(name).setList(foodNameBeanList).LimitNumber();
}private void setTwoList(int positions, int allNumber, String name, int start, int positionesState, Integer money, Integer addEeduceState) {forState = 0;if (listData.size() <= 0) {listData.add(new AllDataBean(positions, allNumber, name, "", start, positionesState, moneys, money));} else {for (int s = 0; s < listData.size(); s++) {if (listData.get(s).getStart() == start && listData.get(s).getPositiones() == positionesState && listData.get(s).getName().equals(name)) {if (addEeduceState == 1) {//加法计算moneys = summary.calculatePriceAddMoney(listData.get(s).getMoneys(), money);} else if (addEeduceState == 2) {if (reduceState == 0 || reduceState == 2) {moneys = summary.calculatePriceMoney(listData.get(s).getMoneys(), money);} else {//当设置了foodNameLimit加入这句话//String names = foodNameLimit.LimitName(listData.get(s).getName());//调用summary.calculateReduceMoney(listData.get(s).getMoneys(), money,names, allNumber);//一个一个减moneys = summary.calculateNoSettingReduceMoney(listData.get(s).getMoneys(), money, "", allNumber);}}listData.get(s).setPosition(positions);listData.get(s).setNumber(allNumber);listData.get(s).setName(name);listData.get(s).setDay("");listData.get(s).setMoneys(moneys);listData.get(s).setStart(start);listData.get(s).setPositiones(positionesState);if (alertState == 0) {bottomAdapter.notifyDataSetChanged();}forState = 1;}}if (forState == 0) {listData.add(new AllDataBean(positions, allNumber, name, "", start, positionesState, moneys, money));}}getAllMoneys();
}/*** 计算总价格*/
private Integer allMoney;private void getAllMoneys() {allMoney = 0;for (int s = 0; s < listData.size(); s++) {allMoney += listData.get(s).getMoneys();}if (alertState == 0) {allMoneys.setText("合计:" + allMoney);}
}/*** 中,晚的状态*/
public void setStatrs(int statr, int positiones) {switch (statr) {//中case 1:if (positiones == 1) {setFors(list, listData, statr, positiones);} else {setFors(lists, listData, statr, positiones);}break;case 2://晚if (positiones == 1) {setFors(list, listData, statr, positiones);} else {setFors(lists, listData, statr, positiones);}break;}
}/*** 添加数据** @param foodNames* @param listData* @param statr* @param positionesState*/
private void setFors(List<FoodName> foodNames, List<AllDataBean> listData, int statr, int positionesState) {for (int i = 0; i < foodNames.size(); i++) {foodNames.get(i).setFoodNumber(0);for (int s = 0; s < listData.size(); s++) {if (listData.get(s).getName().equals(foodNames.get(i).getFoodName()) && listData.get(s).getStart() == statr&& listData.get(s).getPositiones() == positionesState) {foodNames.get(i).setFoodNumber(listData.get(s).getNumber());}}}
}private BottomAdapter bottomAdapter;public void setTextColor(int color, int colors) {zhong.setTextColor(getResources().getColor(color));wan.setTextColor(getResources().getColor(colors));
}private AllPopupWindowsUtils allPopupWindowsUtils;
private int alertState = 1;
private TextView allMoneys;@SuppressLint("NewApi")
@Override
public void onClick(View v) {switch (v.getId()) {case R.id.zhong:setTextColor(R.color.colorAccent, R.color.colorAccents);start = 1;setStatrs(start, positionesState);adapter.notifyDataSetChanged();break;case R.id.wan:setTextColor(R.color.colorAccents, R.color.colorAccent);start = 2;setStatrs(start, positionesState);adapter.notifyDataSetChanged();break;case R.id.chao:chao.setTextColor(getResources().getColor(R.color.colorAccent));mian.setTextColor(getResources().getColor(R.color.colorAccents));positionesState = 1;setStatrs(start, positionesState);setListView(list);adapter.notifyDataSetChanged();break;case R.id.mian:mian.setTextColor(getResources().getColor(R.color.colorAccent));chao.setTextColor(getResources().getColor(R.color.colorAccents));positionesState = 2;setStatrs(start, positionesState);setListView(lists);adapter.notifyDataSetChanged();break;case R.id.iv_pay_anim:if (listData.size() <= 0) {Toast.makeText(AnimationActivity.this, "当前没有菜品请添加查看", Toast.LENGTH_SHORT).show();return;}for (int e = 0; e < listData.size(); e++) {if (listData.get(e).getNumber() == 0) {listData.remove(e);}}if (listData.size() <= 0) {Toast.makeText(AnimationActivity.this, "当前没有菜品请添加查看", Toast.LENGTH_SHORT).show();return;}View view = LayoutInflater.from(this).inflate(R.layout.items, null);/*** 切换样式*/alertStyle.setActivity(this)

// .showAlert(view, this);
.showPoupWindows(chao, R.layout.items, this);
break;
case R.id.clear:
if (listData.size() <= 0) {
Toast.makeText(AnimationActivity.this, “当前没有菜品”, Toast.LENGTH_SHORT).show();
return;
}
allMoney = 0;
allMoneys.setText(“合计:” + allMoney);
listData.clear();
bottomAdapter.setListData(listData);
bottomAdapter.notifyDataSetChanged();
break;
}
}

/*** 更换数据** @param lists*/
private void setListView(List<FoodName> lists) {adapter = new MyAnimationAdapter(this, lists);recyclerView.setAdapter(adapter);
}/*** 重新置回0** @param*/
public void setForList(List<FoodName> forList) {for (int s = 0; s < forList.size(); s++) {forList.get(s).setFoodNumber(0);}
}/*** alert样式*/
private AlertDialog alertDialog;@Override
public void setOpenViews(View view, final AlertDialog alertDialog) {this.alertDialog = alertDialog;showAlert(view, 1);
}/*** PopupWindows样式*/
private AllPopupWindows allPopupWindows;@Override
public void setOpenViews(View view, final AllPopupWindows allPopupWindows) {this.allPopupWindows = allPopupWindows;showAlert(view, 2);}@Override
public void setColseViews() {if (listData.size() == 0) {setForList(list);setForList(lists);adapter.notifyDataSetChanged();}alertState = 1;
}private void showAlert(View view, final int state) {LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);TextView clear = (TextView) view.findViewById(R.id.clear);allMoneys = (TextView) view.findViewById(R.id.allMoneys);TextView colse = (TextView) view.findViewById(R.id.colse);colse.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (state == 1) {//alertif (listData.size() == 0) {setForList(list);setForList(lists);adapter.notifyDataSetChanged();}alertState = 1;alertDialog.dismiss();} else {//popupWindowallPopupWindows.dismiss();}}});clear.setOnClickListener(this);alertState = 0;bottomAdapter = new BottomAdapter(listData, AnimationActivity.this);RecyclerView bottomRecyclerView = (RecyclerView) view.findViewById(R.id.bottomData);bottomRecyclerView.setLayoutManager(linearLayoutManager);bottomRecyclerView.setAdapter(bottomAdapter);getAllMoneys();
}

}

android实现点餐功能相关推荐

  1. 郭宏志的android无线点餐系统,Android无线点餐系统--含代码.doc

    Android无线点餐系统--含代码Android无线点餐系统--含代码 Android 无 线 点 餐 系 统 院系:计算机与信息工程学院 班级:**级软件技术一班 姓名: 学号: PAGE \* ...

  2. 基于android点餐系统需求分析,基于Android的点餐系统的设计及实现

    内容简介: 基于Android的点餐系统的设计及实现,毕业论文,共58页,20083字,附开题报告.答辩文稿.源程序. 摘 要 随着无线网络(如4G.3G.GPRS)及无线网络技术与移动操作系统的不断 ...

  3. android移动点餐系统内容和要求,基于Android云计算的移动点餐系统

    摘 要:系统发挥Android 富有创造力和想象力的云应用开发,实现一套Android 客户端软件和完善的后台服务功能来完成点餐功能.该系统主要包括后台数据库服务器.WEB 服务器.无线网络.Andr ...

  4. 基于android的网上点餐系统设计,基于Android的点餐系统设计与实现

    摘要: 随着社会的信息化,人类的物质世界被网络与科技改变着.2008年在美国,Android手机系统一经诞生,全球手机系统的半壁江山便被其势不可挡的气势占据了,各种基于Android平台的应用系统也不 ...

  5. 基于android点餐系统需求分析,基于android的点餐系统的需求分析

    基于android的点餐系统的需求分析 基于 Android 的点餐系统的需求分析1 功能需求传统的餐饮行业,就像我们平时在街边看到的小餐馆一类的,我们点菜的时候都是有服务员站在我们旁边,我们点一个他 ...

  6. Android 程序自动更新功能模块实现

    2019独角兽企业重金招聘Python工程师标准>>> Android 程序自动更新功能模块实现 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程 ...

  7. Android应用自动更新功能实现使用AsyncTask!

    为什么80%的码农都做不了架构师?>>>    我所开发应用不是面向大众的应用,所以无法放到应用市场去让大家下载,然后通过应用市场更新.所以我必要做一个应用自动更新功能.但是不难,T ...

  8. Android中实现Launcher功能之四---滑屏初探 scrollTo 以及 scrollBy方法使用说明

     本文原创 ,转载必须注明出处 :http://blog.csdn.net/qinjuning 今天给大家介绍下Android中滑屏功能的一个基本实现过程以及原理初探,最后给大家重点讲解View视图中 ...

  9. [转]Android 代码自动提示功能

    源地址http://blog.sina.com.cn/s/blog_7dbac12501019mbh.html 或者http://blog.csdn.net/longvslove/article/de ...

最新文章

  1. 【FPGA】Buffer专题介绍(二)
  2. 一颗强健的“心脏”,让海银的业务系统更高效、更安全!
  3. 对clear float 的理解
  4. 话里话外:装备制造业企业迫切需要实现信息化综合集成
  5. FFMpeg在Windows环境下的编译
  6. Angular 自定义分页组件,自定义每页显示个数
  7. 【数据结构和算法笔记】AOE网和关键路径
  8. 数码管stm32c语言怎么实现,stm32控制数码管 - ST MCU单片机论坛 - ST(意法半导体)MCU官方技术论坛 - 21ic电子技术开发论坛...
  9. Latex笔记:IEEE Access模板 图片排版问题汇总
  10. 批量 材质 调整_3dmax怎么批量修改材质
  11. Visio网络及设备模板库
  12. 创建服务器站点的步骤,如何自己建立网站 基本步骤和流程有哪些
  13. 唐山师范学院计算机论文,唐山师范学院
  14. python实现迷宫小游戏(附源码 简单易懂)
  15. 回首150年炒股史 | 消灭散户的终极武器竟然是“它”?!
  16. lintcode 873 模拟松鼠(JavaScript)
  17. GD32F4 USB DFU IAP
  18. 计算机工程师自荐信英语作文,IT工程师英文自荐信
  19. 吕梁市人民政府刘晋萍副市长率团访问启迪控股
  20. 这次经济危机的一些看法

热门文章

  1. 02数据存入数据库-视频网站-实践-scrapy框架-python
  2. 视频监控和ue4结合
  3. 总结一下多益网络数据研发校招面试
  4. 优雅chrome之几款好用插件分享
  5. 南大通用GBase8s 常用SQL语句(284)
  6. 高仿小米安全中心中垃圾清理成功后的显示界面
  7. 硬件检测助手 v1.0
  8. win10 版本比较 及安装版本
  9. 【教学类-35-01】带笔画步骤图的描字(姓氏)(A4整张)
  10. 接入微信电子发票java_Android app对接微信电子发票功能