RecycleView下的二次贝塞尔购物车轨迹曲线

效果视频地址:
http://player.video.qiyi.com/278cdb58b5bba9d32d161efac3b422f1/0/23/w_19rtsbpghx.swf-albumId=8487824809-tvId=8487824809-isPurchase=0-cnId=30

实现思路:
类似饿了么点餐页面,左右两个RecycleView相关联,点击左侧类别,右侧自动置顶,利用二次贝塞尔曲线公式绘制动画轨迹
左侧菜单布局:
这里写图片描述


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:gravity="center_horizontal"android:id="@+id/left_menu_item"android:background="@drawable/selector_item_select"android:clickable="true"android:layout_width="match_parent"android:layout_height="wrap_content"><TextView
        android:id="@+id/left_menu_textview"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_marginTop="@dimen/item_dish_top_margin"android:layout_marginBottom="@dimen/item_dish_top_margin"android:text="@string/menu_name"android:textSize="@dimen/item_menu_word_size"android:textColor="@color/black"/>
LinearLayout>

右侧菜单布局:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:id="@+id/right_menu_item"android:layout_width="match_parent"android:background="@color/light_gray"android:layout_height="@dimen/item_dish_menu_hight"><LinearLayout
        android:layout_width="2dp"android:layout_height="match_parent"android:layout_marginRight="@dimen/item_menu_title_margin"android:background="@color/black">LinearLayout><TextView
        android:id="@+id/right_menu_tv"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center"android:text="@string/menu_name"android:textSize="@dimen/item_menu_word_size"android:textColor="@color/black"android:background="@color/light_gray"/>LinearLayout>

已选商品上拉布局:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/right_dish_item"android:layout_width="match_parent"android:layout_height="@dimen/item_dish_hight"android:orientation="vertical"><LinearLayout
        android:layout_width="match_parent"android:layout_height="0dp"android:layout_marginTop="@dimen/item_dish_top_margin"android:layout_weight="1"><TextView
            android:id="@+id/right_dish_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/item_dish_horizontal_margin"android:text="@string/dish_name"android:textColor="@color/black"android:textSize="@dimen/item_dish_word_size" />LinearLayout><FrameLayout
        android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"><LinearLayout
            android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="left"android:orientation="horizontal"><TextView
                android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/item_dish_horizontal_margin"android:text="¥"android:textColor="@color/red"android:textSize="@dimen/item_dish_money_size" /><TextView
                android:id="@+id/right_dish_price"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/item_dish_small_horizontal_margin"android:text="10.0"android:textColor="@color/red"android:textSize="@dimen/item_dish_word_size" />LinearLayout><LinearLayout
            android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="right|center_vertical"android:layout_marginBottom="1dp"android:layout_marginRight="@dimen/activity_horizontal_margin"android:gravity="end"android:orientation="horizontal"><ImageView
                android:id="@+id/right_dish_remove"android:layout_width="@dimen/item_dish_circle_size"android:layout_height="@dimen/item_dish_circle_size"android:clickable="true"android:src="@drawable/ic_remove_circle_outline_blue_700_36dp" /><TextView
                android:id="@+id/right_dish_account"android:layout_width="@dimen/item_dish_account_width"android:layout_height="wrap_content"android:gravity="center_horizontal"android:text="1"android:textColor="@color/black"android:textSize="@dimen/item_dish_small_word_size" /><ImageView
                android:id="@+id/right_dish_add"android:layout_width="@dimen/item_dish_circle_size"android:layout_height="@dimen/item_dish_circle_size"android:clickable="true"android:src="@drawable/ic_add_circle_blue_700_36dp" />LinearLayout>FrameLayout>LinearLayout>

已选商品架构布局
这里写图片描述

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">"@+id/linearlayout"android:layout_above="@+id/shopping_cart_bottom"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:background="@color/deep_gray">"match_parent"android:layout_height="wrap_content"android:background="@color/gray">"wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="@dimen/shopping_cart_right_margin"android:layout_marginTop="@dimen/shopping_cart_right_margin"android:layout_marginBottom="@dimen/shopping_cart_right_margin"android:layout_alignParentLeft="true"android:text="@string/shopcart"android:textColor="@color/black"android:textSize="@dimen/shopping_cart_small_size"/>"@+id/clear_layout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_alignParentRight="true"android:clickable="true"android:layout_marginRight="@dimen/shopping_cart_right_margin"android:layout_marginTop="@dimen/shopping_cart_right_margin"android:layout_marginBottom="@dimen/shopping_cart_right_margin">"18dp"android:layout_height="18dp"android:src="@drawable/ic_delete_grey_500_24dp"android:scaleType="centerCrop"android:layout_marginRight="@dimen/item_dish_small_horizontal_margin"/>"wrap_content"android:layout_height="wrap_content"android:text="@string/clear"android:textColor="@color/deep_gray_2"android:textSize="@dimen/shopping_cart_small_size"/></LinearLayout>RelativeLayout>"@+id/recycleview"android:layout_width="match_parent"android:layout_height="@dimen/shopping_cart_bottom_recycle_height"android:background="@color/white"></android.support.v7.widget.RecyclerView>LinearLayout>"@+id/shopping_cart_bottom"android:layout_width="match_parent"android:layout_height="@dimen/shopping_cart_height"android:background="@color/light_black"android:orientation="horizontal"android:clickable="true"android:layout_alignParentBottom="true">"@+id/shopping_cart_total_tv"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:text="120"android:textColor="@color/white"android:textAlignment="center"android:textSize="@dimen/shopping_cart_total_price_word_size"android:textStyle="bold"android:visibility="gone"android:layout_marginLeft="@dimen/shopping_cart_total_price_left_magrin"/></LinearLayout>_cart_layout"android:layout_width="@dimen/shopping_cart_circle_size"android:layout_height="@dimen/shopping_cart_circle_size"android:layout_marginLeft="@dimen/activity_horizontal_margin"android:layout_above="@+id/lineview"android:clickable="true"android:background="@drawable/circle">@+id/shopping_cart"android:layout_width="@dimen/shopping_cart_image_height"android:layout_height="@dimen/shopping_cart_image_height"android:layout_gravity="center"android:src="@drawable/ic_shopping_cart_white_24dp"/>@+id/lineview"android:layout_width="match_parent"android:layout_height="@dimen/shopping_cart_bottom_margin"android:visibility="invisible"android:layout_alignParentBottom="true"/>@+id/shopping_cart_total_num"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/small_red_circle"android:text="1"android:textColor="@color/white"android:textSize="10sp"android:textStyle="bold"android:layout_above="@id/shopping_cart_bottom"android:layout_alignRight="@id/shopping_cart_layout"/>

左侧RecycleView的adapter适配器

package com.example.ytf.elmapplication.adapter;import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;import com.example.ytf.elmapplication.R;
import com.example.ytf.elmapplication.model.DishMenu;import java.util.ArrayList;
import java.util.List;/*** Created by YTF on 2017/7/25.*/public class LeftMenuAdapter extends RecyclerView.Adapter {private Context mContext;private ArrayList mMenuList;private int mSelectedNum;private List mSelectedListenerList;public interface onItemSelectedListener{public void onLeftItemSelected(int postion,DishMenu menu);}public void addItemSelectedListener(onItemSelectedListener listener){if(mSelectedListenerList!=null)mSelectedListenerList.add(listener);}public void removeItemSelectedListener(onItemSelectedListener listener){if(mSelectedListenerList!=null && !mSelectedListenerList.isEmpty())mSelectedListenerList.remove(listener);}public LeftMenuAdapter(Context mContext, ArrayList mMenuList){this.mContext = mContext;this.mMenuList = mMenuList;this.mSelectedNum = -1;this.mSelectedListenerList = new ArrayList<>();if(mMenuList.size()>0)mSelectedNum = 0;}@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.left_menu_item, parent, false);LeftMenuViewHolder viewHolder = new LeftMenuViewHolder(view);return viewHolder;}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {DishMenu dishMenu = mMenuList.get(position);LeftMenuViewHolder viewHolder = (LeftMenuViewHolder)holder;viewHolder.menuName.setText(dishMenu.getMenuName());if(mSelectedNum==position){viewHolder.menuLayout.setSelected(true);}else{viewHolder.menuLayout.setSelected(false);}}@Overridepublic int getItemCount() {return mMenuList.size();}public void setSelectedNum(int selectedNum) {if(selectedNum=0 ) {this.mSelectedNum = selectedNum;notifyDataSetChanged();}}public int getSelectedNum() {return mSelectedNum;}private class LeftMenuViewHolder extends RecyclerView.ViewHolder{TextView menuName;LinearLayout menuLayout;public LeftMenuViewHolder(final View itemView) {super(itemView);menuName = (TextView)itemView.findViewById(R.id.left_menu_textview);menuLayout = (LinearLayout)itemView.findViewById(R.id.left_menu_item);menuLayout.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {int clickPosition = getAdapterPosition();
//                    setSelectedNum(clickPosition);notifyItemSelected(clickPosition);}});}}private void notifyItemSelected(int position) {if(mSelectedListenerList!=null && !mSelectedListenerList.isEmpty()){for(onItemSelectedListener listener:mSelectedListenerList){listener.onLeftItemSelected(position,mMenuList.get(position));}}}
}

右侧RecycleView的适配器adapter

package com.example.ytf.elmapplication.adapter;import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;import com.example.ytf.elmapplication.R;
import com.example.ytf.elmapplication.imp.ShopCartImp;
import com.example.ytf.elmapplication.model.Dish;
import com.example.ytf.elmapplication.model.DishMenu;
import com.example.ytf.elmapplication.model.ShopCart;import java.util.ArrayList;/*** Created by YTF on 2017/7/25.*/public class RightDishAdapter extends RecyclerView.Adapter {private final int MENU_TYPE = 0;private final int DISH_TYPE = 1;private final int HEAD_TYPE = 2;private Context mContext;private ArrayList mMenuList;private int mItemCount;private ShopCart shopCart;private ShopCartImp shopCartImp;public RightDishAdapter(Context mContext, ArrayList mMenuList, ShopCart shopCart){this.mContext = mContext;this.mMenuList = mMenuList;this.mItemCount = mMenuList.size();this.shopCart = shopCart;for(DishMenu menu:mMenuList){mItemCount+=menu.getDishList().size();}}@Overridepublic int getItemViewType(int position) {int sum=0;for(DishMenu menu:mMenuList){if(position==sum){return MENU_TYPE;}sum+=menu.getDishList().size()+1;}return DISH_TYPE;}@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {if(viewType==MENU_TYPE){View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.right_menu_item, parent, false);MenuViewHolder viewHolder = new MenuViewHolder(view);return viewHolder;}else{View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.right_dish_item, parent, false);DishViewHolder viewHolder = new DishViewHolder(view);return viewHolder;}}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {if(getItemViewType(position)==MENU_TYPE){MenuViewHolder menuholder = (MenuViewHolder)holder;if(menuholder!=null) {menuholder.right_menu_title.setText(getMenuByPosition(position).getMenuName());menuholder.right_menu_layout.setContentDescription(position+"");}}else {final DishViewHolder dishholder = (DishViewHolder) holder;if (dishholder != null) {final Dish dish = getDishByPosition(position);dishholder.right_dish_name_tv.setText(dish.getDishName());dishholder.right_dish_price_tv.setText(dish.getDishPrice()+"");dishholder.right_dish_layout.setContentDescription(position+"");int count = 0;if(shopCart.getShoppingSingleMap().containsKey(dish)){count = shopCart.getShoppingSingleMap().get(dish);}if(count<=0){dishholder.right_dish_remove_iv.setVisibility(View.GONE);dishholder.right_dish_account_tv.setVisibility(View.GONE);}else {dishholder.right_dish_remove_iv.setVisibility(View.VISIBLE);dishholder.right_dish_account_tv.setVisibility(View.VISIBLE);dishholder.right_dish_account_tv.setText(count+"");}dishholder.right_dish_add_iv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if(shopCart.addShoppingSingle(dish)) {notifyItemChanged(position);if(shopCartImp!=null)shopCartImp.add(view,position);}}});dishholder.right_dish_remove_iv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if(shopCart.subShoppingSingle(dish)){notifyItemChanged(position);if(shopCartImp!=null)shopCartImp.remove(view,position);}}});}}}public DishMenu getMenuByPosition(int position){int sum =0;for(DishMenu menu:mMenuList){if(position==sum){return menu;}sum+=menu.getDishList().size()+1;}return null;}public Dish getDishByPosition(int position){for(DishMenu menu:mMenuList){if(position>0 && position<=menu.getDishList().size()){return menu.getDishList().get(position-1);}else{position-=menu.getDishList().size()+1;}}return null;}public DishMenu getMenuOfMenuByPosition(int position){for(DishMenu menu:mMenuList){if(position==0)return menu;if(position>0 && position<=menu.getDishList().size()){return menu;}else{position-=menu.getDishList().size()+1;}}return null;}@Overridepublic int getItemCount() {return mItemCount;}public ShopCartImp getShopCartImp() {return shopCartImp;}public void setShopCartImp(ShopCartImp shopCartImp) {this.shopCartImp = shopCartImp;}private class MenuViewHolder extends RecyclerView.ViewHolder{private LinearLayout right_menu_layout;private TextView right_menu_title;public MenuViewHolder(View itemView) {super(itemView);right_menu_layout = itemView.findViewById(R.id.right_menu_item);right_menu_title = (TextView)itemView.findViewById(R.id.right_menu_tv);}}private class DishViewHolder extends RecyclerView.ViewHolder{private TextView right_dish_name_tv;private TextView right_dish_price_tv;private LinearLayout right_dish_layout;private ImageView right_dish_remove_iv;private ImageView right_dish_add_iv;private TextView right_dish_account_tv;public DishViewHolder(View itemView) {super(itemView);right_dish_name_tv = (TextView)itemView.findViewById(R.id.right_dish_name);right_dish_price_tv = (TextView)itemView.findViewById(R.id.right_dish_price);right_dish_layout = (LinearLayout)itemView.findViewById(R.id.right_dish_item);right_dish_remove_iv = (ImageView)itemView.findViewById(R.id.right_dish_remove);right_dish_add_iv = (ImageView)itemView.findViewById(R.id.right_dish_add);right_dish_account_tv = (TextView) itemView.findViewById(R.id.right_dish_account);}}
}

已选商品的上拉适配器

package com.example.ytf.elmapplication.adapter;import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;import com.example.ytf.elmapplication.R;
import com.example.ytf.elmapplication.imp.ShopCartImp;
import com.example.ytf.elmapplication.model.Dish;
import com.example.ytf.elmapplication.model.DishMenu;
import com.example.ytf.elmapplication.model.ShopCart;import java.util.ArrayList;/*** Created by YTF on 2017/7/25.*/public class RightDishAdapter extends RecyclerView.Adapter {private final int MENU_TYPE = 0;private final int DISH_TYPE = 1;private final int HEAD_TYPE = 2;private Context mContext;private ArrayList mMenuList;private int mItemCount;private ShopCart shopCart;private ShopCartImp shopCartImp;public RightDishAdapter(Context mContext, ArrayList mMenuList, ShopCart shopCart){this.mContext = mContext;this.mMenuList = mMenuList;this.mItemCount = mMenuList.size();this.shopCart = shopCart;for(DishMenu menu:mMenuList){mItemCount+=menu.getDishList().size();}}@Overridepublic int getItemViewType(int position) {int sum=0;for(DishMenu menu:mMenuList){if(position==sum){return MENU_TYPE;}sum+=menu.getDishList().size()+1;}return DISH_TYPE;}@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {if(viewType==MENU_TYPE){View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.right_menu_item, parent, false);MenuViewHolder viewHolder = new MenuViewHolder(view);return viewHolder;}else{View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.right_dish_item, parent, false);DishViewHolder viewHolder = new DishViewHolder(view);return viewHolder;}}@Overridepublic void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {if(getItemViewType(position)==MENU_TYPE){MenuViewHolder menuholder = (MenuViewHolder)holder;if(menuholder!=null) {menuholder.right_menu_title.setText(getMenuByPosition(position).getMenuName());menuholder.right_menu_layout.setContentDescription(position+"");}}else {final DishViewHolder dishholder = (DishViewHolder) holder;if (dishholder != null) {final Dish dish = getDishByPosition(position);dishholder.right_dish_name_tv.setText(dish.getDishName());dishholder.right_dish_price_tv.setText(dish.getDishPrice()+"");dishholder.right_dish_layout.setContentDescription(position+"");int count = 0;if(shopCart.getShoppingSingleMap().containsKey(dish)){count = shopCart.getShoppingSingleMap().get(dish);}if(count<=0){dishholder.right_dish_remove_iv.setVisibility(View.GONE);dishholder.right_dish_account_tv.setVisibility(View.GONE);}else {dishholder.right_dish_remove_iv.setVisibility(View.VISIBLE);dishholder.right_dish_account_tv.setVisibility(View.VISIBLE);dishholder.right_dish_account_tv.setText(count+"");}dishholder.right_dish_add_iv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if(shopCart.addShoppingSingle(dish)) {notifyItemChanged(position);if(shopCartImp!=null)shopCartImp.add(view,position);}}});dishholder.right_dish_remove_iv.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if(shopCart.subShoppingSingle(dish)){notifyItemChanged(position);if(shopCartImp!=null)shopCartImp.remove(view,position);}}});}}}public DishMenu getMenuByPosition(int position){int sum =0;for(DishMenu menu:mMenuList){if(position==sum){return menu;}sum+=menu.getDishList().size()+1;}return null;}public Dish getDishByPosition(int position){for(DishMenu menu:mMenuList){if(position>0 && position<=menu.getDishList().size()){return menu.getDishList().get(position-1);}else{position-=menu.getDishList().size()+1;}}return null;}public DishMenu getMenuOfMenuByPosition(int position){for(DishMenu menu:mMenuList){if(position==0)return menu;if(position>0 && position<=menu.getDishList().size()){return menu;}else{position-=menu.getDishList().size()+1;}}return null;}@Overridepublic int getItemCount() {return mItemCount;}public ShopCartImp getShopCartImp() {return shopCartImp;}public void setShopCartImp(ShopCartImp shopCartImp) {this.shopCartImp = shopCartImp;}private class MenuViewHolder extends RecyclerView.ViewHolder{private LinearLayout right_menu_layout;private TextView right_menu_title;public MenuViewHolder(View itemView) {super(itemView);right_menu_layout = itemView.findViewById(R.id.right_menu_item);right_menu_title = (TextView)itemView.findViewById(R.id.right_menu_tv);}}private class DishViewHolder extends RecyclerView.ViewHolder{private TextView right_dish_name_tv;private TextView right_dish_price_tv;private LinearLayout right_dish_layout;private ImageView right_dish_remove_iv;private ImageView right_dish_add_iv;private TextView right_dish_account_tv;public DishViewHolder(View itemView) {super(itemView);right_dish_name_tv = (TextView)itemView.findViewById(R.id.right_dish_name);right_dish_price_tv = (TextView)itemView.findViewById(R.id.right_dish_price);right_dish_layout = (LinearLayout)itemView.findViewById(R.id.right_dish_item);right_dish_remove_iv = (ImageView)itemView.findViewById(R.id.right_dish_remove);right_dish_add_iv = (ImageView)itemView.findViewById(R.id.right_dish_add);right_dish_account_tv = (TextView) itemView.findViewById(R.id.right_dish_account);}}
}

商品接口

package com.example.ytf.elmapplication.imp;import android.view.View;/*** Created by YTF on 2017/7/25.*/public interface ShopCartImp {void add(View view, int postion);void remove(View view, int postion);
}

菜单属性类

package com.example.ytf.elmapplication.model;/*** Created by YTF on 2017/7/25.* 菜单属性类*/public class Dish {private String dishName;private double dishPrice;private int dishAmount;private int dishRemain;public Dish(String dishName, double dishPrice, int dishAmount) {this.dishName = dishName;this.dishPrice = dishPrice;this.dishAmount = dishAmount;this.dishRemain = dishAmount;}public String getDishName() {return dishName;}public void setDishName(String dishName) {this.dishName = dishName;}public double getDishPrice() {return dishPrice;}public void setDishPrice(double dishPrice) {this.dishPrice = dishPrice;}public int getDishAmount() {return dishAmount;}public void setDishAmount(int dishAmount) {this.dishAmount = dishAmount;}public int getDishRemain() {return dishRemain;}public void setDishRemain(int dishRemain) {this.dishRemain = dishRemain;}@Overridepublic boolean equals(Object obj) {if (this == obj) return true;return obj instanceof Dish &&this.dishName.equals(((Dish)obj).dishName) &&this.dishPrice ==  ((Dish)obj).dishPrice &&this.dishAmount == ((Dish)obj).dishAmount &&this.dishRemain == ((Dish)obj).dishRemain;}public int hashCode(){int code = this.dishName.hashCode()+(int)this.dishPrice;return code;}
}

菜单名称实体类

package com.example.ytf.elmapplication.model;import java.util.ArrayList;/*** Created by YTF on 2017/7/25.*/public class DishMenu {private String menuName;private ArrayList dishList;public DishMenu(){}public DishMenu(String menuName, ArrayList dishList) {this.menuName = menuName;this.dishList = dishList;}public String getMenuName() {return menuName;}public void setMenuName(String menuName) {this.menuName = menuName;}public ArrayList getDishList() {return dishList;}public void setDishList(ArrayList dishList) {this.dishList = dishList;}
}

已选商品的数量价格实体类

package com.example.ytf.elmapplication.model;import android.util.Log;import java.util.HashMap;
import java.util.Map;/*** Created by YTF on 2017/7/25.*/public class ShopCart {private int shoppingAccount;//商品总数private double shoppingTotalPrice;//商品总价钱private Map shoppingSingle;//单个物品的总价价钱public ShopCart() {this.shoppingAccount = 0;this.shoppingTotalPrice = 0;this.shoppingSingle = new HashMap<>();}public int getShoppingAccount() {return shoppingAccount;}public double getShoppingTotalPrice() {return shoppingTotalPrice;}public Map getShoppingSingleMap() {return shoppingSingle;}//    增加商品数量public boolean addShoppingSingle(Dish dish) {int remain = dish.getDishRemain();if (remain <= 0)return false;dish.setDishRemain(--remain);int num = 0;if (shoppingSingle.containsKey(dish)) {num = shoppingSingle.get(dish);}num += 1;shoppingSingle.put(dish, num);Log.e("TAG", "addShoppingSingle: " + shoppingSingle.get(dish));shoppingTotalPrice += dish.getDishPrice();shoppingAccount++;return true;}//减去商品数量public boolean subShoppingSingle(Dish dish) {int num = 0;if (shoppingSingle.containsKey(dish)) {num = shoppingSingle.get(dish);}if (num <= 0) return false;num--;int remain = dish.getDishRemain();dish.setDishRemain(++remain);shoppingSingle.put(dish, num);if (num == 0) shoppingSingle.remove(dish);shoppingTotalPrice -= dish.getDishPrice();shoppingAccount--;return true;}//    获取选中商品数量public int getDishAccount() {return shoppingSingle.size();}//清空选中商品数量public void clear() {this.shoppingAccount = 0;this.shoppingTotalPrice = 0;this.shoppingSingle.clear();}}

自定义view1

package com.example.ytf.elmapplication.wiget;import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.PointF;
import android.os.Build;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.widget.ImageView;/*** Created by YTF on 2017/7/25.* 自定义Imageview控件*/@SuppressLint("AppCompatCustomView")
public class FakeAddImageView extends ImageView {private PointF mPointF;public FakeAddImageView(Context context) {super(context);}public FakeAddImageView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);}public FakeAddImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@TargetApi(Build.VERSION_CODES.LOLLIPOP)public FakeAddImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);}public void setMPointF(PointF pointF) {setX(pointF.x);setY(pointF.y);}public PointF getmPointF() {return mPointF;}public void setmPointF(PointF mPointF) {setX(mPointF.x);setY(mPointF.y);}
}

自定义view2二次贝塞尔曲线绘制轨迹

package com.example.ytf.elmapplication.wiget;/*** Created by YTF on 2017/7/25.*/import android.animation.TypeEvaluator;
import android.graphics.PointF;/*** 自定义估值器*/
public class PointFTypeEvaluator  implements TypeEvaluator<PointF> {/*** 每个估值器对应一个属性动画,每个属性动画仅对应唯一一个控制点*/PointF control;/*** 估值器返回值*/PointF mPointF = new PointF();public PointFTypeEvaluator(PointF control) {this.control = control;}@Overridepublic PointF evaluate(float fraction, PointF startValue, PointF endValue) {return getBezierPoint(startValue, endValue, control, fraction);}/*** 二次贝塞尔曲线公式** @param start   开始的数据点* @param end     结束的数据点* @param control 控制点* @param t       float 0-1* @return 不同t对应的PointF*/private PointF getBezierPoint(PointF start, PointF end, PointF control, float t) {mPointF.x = (1 - t) * (1 - t) * start.x + 2 * t * (1 - t) * control.x + t * t * end.x;mPointF.y = (1 - t) * (1 - t) * start.y + 2 * t * (1 - t) * control.y + t * t * end.y;return mPointF;}
}

自定义view3自定义分割线

package com.example.ytf.elmapplication.wiget;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;/*** Created by YTF on 2017/7/25.* 自定义RecycleView的分割线*/public class RecycleViewDivider  extends RecyclerView.ItemDecoration {private Paint mPaint;private Drawable mDivider;private int mDividerHeight = 2;//分割线高度,默认为1pxprivate int mOrientation;//列表的方向:LinearLayoutManager.VERTICAL或LinearLayoutManager.HORIZONTALprivate static final int[] ATTRS = new int[]{android.R.attr.listDivider};/*** 默认分割线:高度为2px,颜色为灰色** @param context* @param orientation 列表方向*/public RecycleViewDivider(Context context, int orientation) {if (orientation != LinearLayoutManager.VERTICAL && orientation != LinearLayoutManager.HORIZONTAL) {throw new IllegalArgumentException("请输入正确的参数!");}mOrientation = orientation;final TypedArray a = context.obtainStyledAttributes(ATTRS);mDivider = a.getDrawable(0);a.recycle();}/*** 自定义分割线** @param context* @param orientation 列表方向* @param drawableId  分割线图片*/public RecycleViewDivider(Context context, int orientation, int drawableId) {this(context, orientation);mDivider = ContextCompat.getDrawable(context, drawableId);mDividerHeight = mDivider.getIntrinsicHeight();}/*** 自定义分割线** @param context* @param orientation   列表方向* @param dividerHeight 分割线高度* @param dividerColor  分割线颜色*/public RecycleViewDivider(Context context, int orientation, int dividerHeight, int dividerColor) {this(context, orientation);mDividerHeight = dividerHeight;mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);mPaint.setColor(dividerColor);mPaint.setStyle(Paint.Style.FILL);}//获取分割线尺寸@Overridepublic void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {super.getItemOffsets(outRect, view, parent, state);outRect.set(0, 0, 0, mDividerHeight);}//绘制分割线@Overridepublic void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDraw(c, parent, state);if (mOrientation == LinearLayoutManager.VERTICAL) {drawVertical(c, parent);} else {drawHorizontal(c, parent);}}//绘制横向 item 分割线private void drawHorizontal(Canvas canvas, RecyclerView parent) {final int left = parent.getPaddingLeft();final int right = parent.getMeasuredWidth() - parent.getPaddingRight();final int childSize = parent.getChildCount();for (int i = 0; i < childSize; i++) {final View child = parent.getChildAt(i);RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();final int top = child.getBottom() + layoutParams.bottomMargin;final int bottom = top + mDividerHeight;if (mDivider != null) {mDivider.setBounds(left, top, right, bottom);mDivider.draw(canvas);}if (mPaint != null) {canvas.drawRect(left, top, right, bottom, mPaint);}}}//绘制纵向 item 分割线private void drawVertical(Canvas canvas, RecyclerView parent) {final int top = parent.getPaddingTop();final int bottom = parent.getMeasuredHeight() - parent.getPaddingBottom();final int childSize = parent.getChildCount();for (int i = 0; i < childSize; i++) {final View child = parent.getChildAt(i);RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) child.getLayoutParams();final int left = child.getRight() + layoutParams.rightMargin;final int right = left + mDividerHeight;if (mDivider != null) {mDivider.setBounds(left, top, right, bottom);mDivider.draw(canvas);}if (mPaint != null) {canvas.drawRect(left, top, right, bottom, mPaint);}}}
}

自定义view4

package com.example.ytf.elmapplication.wiget;import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;import com.example.ytf.elmapplication.R;
import com.example.ytf.elmapplication.adapter.PopupDishAdapter;
import com.example.ytf.elmapplication.imp.ShopCartImp;
import com.example.ytf.elmapplication.model.ShopCart;/*** Created by YTF on 2017/7/25.*/public class ShopCartDialog extends Dialog implements View.OnClickListener,ShopCartImp {private LinearLayout linearLayout,bottomLayout,clearLayout;private FrameLayout shopingcartLayout;private ShopCart shopCart;private TextView totalPriceTextView;private TextView totalPriceNumTextView;private RecyclerView recyclerView;private PopupDishAdapter dishAdapter;private ShopCartDialogImp shopCartDialogImp;public ShopCartDialog(Context context, ShopCart shopCart, int themeResId) {super(context,themeResId);this.shopCart = shopCart;}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.cart_popupview);linearLayout = (LinearLayout) findViewById(R.id.linearlayout);clearLayout = (LinearLayout)findViewById(R.id.clear_layout);shopingcartLayout = (FrameLayout)findViewById(R.id.shopping_cart_layout);bottomLayout = (LinearLayout)findViewById(R.id.shopping_cart_bottom);totalPriceTextView = (TextView)findViewById(R.id.shopping_cart_total_tv);totalPriceNumTextView = (TextView)findViewById(R.id.shopping_cart_total_num);recyclerView = (RecyclerView)findViewById(R.id.recycleview);shopingcartLayout.setOnClickListener(this);bottomLayout.setOnClickListener(this);clearLayout.setOnClickListener(this);recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));dishAdapter = new PopupDishAdapter(getContext(),shopCart);recyclerView.setAdapter(dishAdapter);dishAdapter.setShopCartImp(this);showTotalPrice();}@Overridepublic void show() {super.show();animationShow(1000);}@Overridepublic void dismiss() {animationHide(1000);}private void showTotalPrice(){if(shopCart!=null && shopCart.getShoppingTotalPrice()>0){totalPriceTextView.setVisibility(View.VISIBLE);totalPriceTextView.setText("¥ "+shopCart.getShoppingTotalPrice());totalPriceNumTextView.setVisibility(View.VISIBLE);totalPriceNumTextView.setText(""+shopCart.getShoppingAccount());}else {totalPriceTextView.setVisibility(View.GONE);totalPriceNumTextView.setVisibility(View.GONE);}}private void animationShow(int mDuration) {AnimatorSet animatorSet = new AnimatorSet();animatorSet.playTogether(ObjectAnimator.ofFloat(linearLayout, "translationY",1000, 0).setDuration(mDuration));animatorSet.start();}private void animationHide(int mDuration) {AnimatorSet animatorSet = new AnimatorSet();animatorSet.playTogether(ObjectAnimator.ofFloat(linearLayout, "translationY",0,1000).setDuration(mDuration));animatorSet.start();if(shopCartDialogImp!=null){shopCartDialogImp.dialogDismiss();}animatorSet.addListener(new Animator.AnimatorListener() {@Overridepublic void onAnimationStart(Animator animator) {}@Overridepublic void onAnimationEnd(Animator animator) {ShopCartDialog.super.dismiss();}@Overridepublic void onAnimationCancel(Animator animator) {}@Overridepublic void onAnimationRepeat(Animator animator) {}});}@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.shopping_cart_bottom:case R.id.shopping_cart_layout:this.dismiss();break;case R.id.clear_layout:clear();break;}}@Overridepublic void add(View view, int postion) {showTotalPrice();}@Overridepublic void remove(View view, int postion) {showTotalPrice();if(shopCart.getShoppingAccount()==0){this.dismiss();}}public ShopCartDialogImp getShopCartDialogImp() {return shopCartDialogImp;}public void setShopCartDialogImp(ShopCartDialogImp shopCartDialogImp) {this.shopCartDialogImp = shopCartDialogImp;}public interface ShopCartDialogImp{public void dialogDismiss();}public void clear(){shopCart.clear();showTotalPrice();if(shopCart.getShoppingAccount()==0){this.dismiss();}}
}

MainAcvitity填充数据,实现逻辑

package com.example.ytf.elmapplication;import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.graphics.PointF;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.AccelerateInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;import com.example.ytf.elmapplication.adapter.LeftMenuAdapter;
import com.example.ytf.elmapplication.adapter.RightDishAdapter;
import com.example.ytf.elmapplication.imp.ShopCartImp;
import com.example.ytf.elmapplication.model.Dish;
import com.example.ytf.elmapplication.model.DishMenu;
import com.example.ytf.elmapplication.model.ShopCart;
import com.example.ytf.elmapplication.wiget.FakeAddImageView;
import com.example.ytf.elmapplication.wiget.PointFTypeEvaluator;
import com.example.ytf.elmapplication.wiget.ShopCartDialog;import java.util.ArrayList;public class MainActivity extends AppCompatActivity implements LeftMenuAdapter.onItemSelectedListener,ShopCartImp,ShopCartDialog.ShopCartDialogImp {private final static String TAG = "MainActivity";private RecyclerView leftMenu;//左侧菜单栏private RecyclerView rightMenu;//右侧菜单栏private TextView headerView;private LinearLayout headerLayout;//右侧菜单栏最上面的菜单private LinearLayout bottomLayout;private DishMenu headMenu;private LeftMenuAdapter leftAdapter;private RightDishAdapter rightAdapter;private ArrayList dishMenuList;//数据源private boolean leftClickType = false;//左侧菜单点击引发的右侧联动private ShopCart shopCart;//    private FakeAddImageView fakeAddImageView;private ImageView shoppingCartView;private FrameLayout shopingCartLayout;private TextView totalPriceTextView;private TextView totalPriceNumTextView;private RelativeLayout mainLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initData();initView();initAdapter();}private void initView(){mainLayout = (RelativeLayout) findViewById(R.id.main_layout);leftMenu = (RecyclerView)findViewById(R.id.left_menu);rightMenu = (RecyclerView)findViewById(R.id.right_menu);headerView = (TextView)findViewById(R.id.right_menu_tv);headerLayout = (LinearLayout)findViewById(R.id.right_menu_item);
//        fakeAddImageView = (FakeAddImageView)findViewById(R.id.right_dish_fake_add);bottomLayout = (LinearLayout)findViewById(R.id.shopping_cart_bottom);shoppingCartView = (ImageView) findViewById(R.id.shopping_cart);shopingCartLayout = (FrameLayout) findViewById(R.id.shopping_cart_layout);totalPriceTextView = (TextView)findViewById(R.id.shopping_cart_total_tv);totalPriceNumTextView = (TextView)findViewById(R.id.shopping_cart_total_num);leftMenu.setLayoutManager(new LinearLayoutManager(this));rightMenu.setLayoutManager(new LinearLayoutManager(this));rightMenu.addOnScrollListener(new RecyclerView.OnScrollListener() {@Overridepublic void onScrollStateChanged(RecyclerView recyclerView, int newState) {super.onScrollStateChanged(recyclerView, newState);}@Overridepublic void onScrolled(RecyclerView recyclerView, int dx, int dy) {super.onScrolled(recyclerView, dx, dy);if( recyclerView.canScrollVertically(1)==false) {//无法下滑showHeadView();return;}View underView = null;if(dy>0)underView = rightMenu.findChildViewUnder(headerLayout.getX(),headerLayout.getMeasuredHeight()+1);elseunderView = rightMenu.findChildViewUnder(headerLayout.getX(),0);if(underView!=null && underView.getContentDescription()!=null ){int position = Integer.parseInt(underView.getContentDescription().toString());DishMenu menu = rightAdapter.getMenuOfMenuByPosition(position);if(leftClickType || !menu.getMenuName().equals(headMenu.getMenuName())) {if (dy> 0 && headerLayout.getTranslationY()<=1 && headerLayout.getTranslationY()>= -1 * headerLayout.getMeasuredHeight()*4/5 && !leftClickType) {// underView.getTop()>9int dealtY = underView.getTop() - headerLayout.getMeasuredHeight();headerLayout.setTranslationY(dealtY);
//                            Log.e(TAG, "onScrolled: "+headerLayout.getTranslationY()+"   "+headerLayout.getBottom()+"  -  "+headerLayout.getMeasuredHeight() );}else if(dy<0 && headerLayout.getTranslationY()<=0 && !leftClickType) {headerView.setText(menu.getMenuName());int dealtY = underView.getBottom() - headerLayout.getMeasuredHeight();headerLayout.setTranslationY(dealtY);
//                            Log.e(TAG, "onScrolled: "+headerLayout.getTranslationY()+"   "+headerLayout.getBottom()+"  -  "+headerLayout.getMeasuredHeight() );}else{headerLayout.setTranslationY(0);headMenu = menu;headerView.setText(headMenu.getMenuName());for (int i = 0; i < dishMenuList.size(); i++) {if (dishMenuList.get(i) == headMenu) {leftAdapter.setSelectedNum(i);break;}}if(leftClickType)leftClickType=false;Log.e(TAG, "onScrolled: "+menu.getMenuName() );}}}}});shopingCartLayout.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {showCart(view);}});}private void initData(){shopCart = new ShopCart();dishMenuList = new ArrayList<>();ArrayList dishs1 = new ArrayList<>();dishs1.add(new Dish("面包",1.0,10));dishs1.add(new Dish("蛋挞",1.0,10));dishs1.add(new Dish("牛奶",1.0,10));dishs1.add(new Dish("肠粉",1.0,10));dishs1.add(new Dish("绿茶饼",1.0,10));dishs1.add(new Dish("花卷",1.0,10));dishs1.add(new Dish("包子",1.0,10));DishMenu breakfast = new DishMenu("早点",dishs1);ArrayList dishs2 = new ArrayList<>();dishs2.add(new Dish("粥",1.0,10));dishs2.add(new Dish("炒饭",1.0,10));dishs2.add(new Dish("炒米粉",1.0,10));dishs2.add(new Dish("炒粿条",1.0,10));dishs2.add(new Dish("炒牛河",1.0,10));dishs2.add(new Dish("炒菜",1.0,10));DishMenu launch = new DishMenu("午餐",dishs2);ArrayList dishs3 = new ArrayList<>();dishs3.add(new Dish("淋菜",1.0,10));dishs3.add(new Dish("川菜",1.0,10));dishs3.add(new Dish("湘菜",1.0,10));dishs3.add(new Dish("粤菜",1.0,10));dishs3.add(new Dish("赣菜",1.0,10));dishs3.add(new Dish("东北菜",1.0,10));DishMenu evening = new DishMenu("晚餐",dishs3);ArrayList dishs4 = new ArrayList<>();dishs4.add(new Dish("淋菜",1.0,10));dishs4.add(new Dish("川菜",1.0,10));dishs4.add(new Dish("湘菜",1.0,10));dishs4.add(new Dish("粤菜",1.0,10));dishs4.add(new Dish("赣菜",1.0,10));dishs4.add(new Dish("东北菜",1.0,10));DishMenu menu1 = new DishMenu("夜宵",dishs3);dishMenuList.add(breakfast);dishMenuList.add(launch);dishMenuList.add(evening);dishMenuList.add(menu1);}private void initAdapter(){leftAdapter = new LeftMenuAdapter(this,dishMenuList);rightAdapter = new RightDishAdapter(this,dishMenuList,shopCart);rightMenu.setAdapter(rightAdapter);leftMenu.setAdapter(leftAdapter);leftAdapter.addItemSelectedListener(this);rightAdapter.setShopCartImp(this);initHeadView();}private void initHeadView(){headMenu = rightAdapter.getMenuOfMenuByPosition(0);headerLayout.setContentDescription("0");headerView.setText(headMenu.getMenuName());}@Overrideprotected void onDestroy() {super.onDestroy();leftAdapter.removeItemSelectedListener(this);}private void showHeadView(){headerLayout.setTranslationY(0);View underView = rightMenu.findChildViewUnder(headerView.getX(),0);if(underView!=null && underView.getContentDescription()!=null){int position = Integer.parseInt(underView.getContentDescription().toString());DishMenu menu = rightAdapter.getMenuOfMenuByPosition(position+1);headMenu = menu;headerView.setText(headMenu.getMenuName());for (int i = 0; i < dishMenuList.size(); i++) {if (dishMenuList.get(i) == headMenu) {leftAdapter.setSelectedNum(i);break;}}}}@Overridepublic void onLeftItemSelected(int position, DishMenu menu) {int sum=0;for(int i = 0;isum+=dishMenuList.get(i).getDishList().size()+1;}LinearLayoutManager layoutManager = (LinearLayoutManager) rightMenu.getLayoutManager();layoutManager.scrollToPositionWithOffset(sum,0);leftClickType = true;}@Overridepublic void add(View view,int position) {int[] addLocation = new int[2];int[] cartLocation = new int[2];int[] recycleLocation = new int[2];view.getLocationInWindow(addLocation);shoppingCartView.getLocationInWindow(cartLocation);rightMenu.getLocationInWindow(recycleLocation);PointF startP = new PointF();PointF endP = new PointF();PointF controlP = new PointF();startP.x = addLocation[0];startP.y = addLocation[1]-recycleLocation[1];endP.x = cartLocation[0];endP.y = cartLocation[1]-recycleLocation[1];controlP.x = endP.x;controlP.y = startP.y;final FakeAddImageView fakeAddImageView = new FakeAddImageView(this);mainLayout.addView(fakeAddImageView);fakeAddImageView.setImageResource(R.drawable.ic_add_circle_blue_700_36dp);fakeAddImageView.getLayoutParams().width = getResources().getDimensionPixelSize(R.dimen.item_dish_circle_size);fakeAddImageView.getLayoutParams().height = getResources().getDimensionPixelSize(R.dimen.item_dish_circle_size);fakeAddImageView.setVisibility(View.VISIBLE);ObjectAnimator addAnimator = ObjectAnimator.ofObject(fakeAddImageView, "mPointF",new PointFTypeEvaluator(controlP), startP, endP);addAnimator.setInterpolator(new AccelerateInterpolator());addAnimator.addListener(new Animator.AnimatorListener() {@Overridepublic void onAnimationStart(Animator animator) {fakeAddImageView.setVisibility(View.VISIBLE);}@Overridepublic void onAnimationEnd(Animator animator) {fakeAddImageView.setVisibility(View.GONE);mainLayout.removeView(fakeAddImageView);}@Overridepublic void onAnimationCancel(Animator animator) {}@Overridepublic void onAnimationRepeat(Animator animator) {}});ObjectAnimator scaleAnimatorX = new ObjectAnimator().ofFloat(shoppingCartView,"scaleX", 0.6f, 1.0f);ObjectAnimator scaleAnimatorY = new ObjectAnimator().ofFloat(shoppingCartView,"scaleY", 0.6f, 1.0f);scaleAnimatorX.setInterpolator(new AccelerateInterpolator());scaleAnimatorY.setInterpolator(new AccelerateInterpolator());AnimatorSet animatorSet = new AnimatorSet();animatorSet.play(scaleAnimatorX).with(scaleAnimatorY).after(addAnimator);animatorSet.setDuration(800);animatorSet.start();showTotalPrice();}@Overridepublic void remove(View view,int position) {showTotalPrice();}private void showTotalPrice(){if(shopCart!=null && shopCart.getShoppingTotalPrice()>0){totalPriceTextView.setVisibility(View.VISIBLE);totalPriceTextView.setText("¥ "+shopCart.getShoppingTotalPrice());totalPriceNumTextView.setVisibility(View.VISIBLE);totalPriceNumTextView.setText(""+shopCart.getShoppingAccount());}else {totalPriceTextView.setVisibility(View.GONE);totalPriceNumTextView.setVisibility(View.GONE);}}private void showCart(View view) {if(shopCart!=null && shopCart.getShoppingAccount()>0){ShopCartDialog dialog = new ShopCartDialog(this,shopCart,R.style.cartdialog);Window window = dialog.getWindow();dialog.setShopCartDialogImp(this);dialog.setCanceledOnTouchOutside(true);dialog.setCancelable(true);dialog.show();WindowManager.LayoutParams params = window.getAttributes();params.width = WindowManager.LayoutParams.MATCH_PARENT;params.height = WindowManager.LayoutParams.WRAP_CONTENT;params.gravity = Gravity.BOTTOM;params.dimAmount =0.5f;window.setAttributes(params);}}@Overridepublic void dialogDismiss() {showTotalPrice();rightAdapter.notifyDataSetChanged();}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部