登录,注册,购物车,水波纹,属性动画

登录

package android.bw.com.app0405.activity;

import android.bw.com.app0405.R;
import android.bw.com.app0405.bean.LoginBean;
import android.bw.com.app0405.bean.LoginResult;
import android.bw.com.app0405.mvp.model.UserModelImp;
import android.bw.com.app0405.mvp.presenter.UserPresenterImp;
import android.bw.com.app0405.mvp.view.UserView;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener, UserView {

    private Button btn_login;
    private TextView tv_regis;
    private EditText login_pwd;
    private EditText login_phone;
    private TextView login_back;
    private SharedPreferences sp;
    private UserPresenterImp userPresenterImp;
    private String loginPhone;
    private String loginPwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        //初始化控件
        login_back = findViewById(R.id.login_back);
        login_phone = findViewById(R.id.login_phone);
        login_pwd = findViewById(R.id.login_pwd);
        tv_regis = findViewById(R.id.tv_regis);
        btn_login = findViewById(R.id.btn_login);

        //监听
        tv_regis.setOnClickListener(this);
        btn_login.setOnClickListener(this);
        login_back.setOnClickListener(this);

        //接受会传值
        sp = getSharedPreferences("user", MODE_PRIVATE);
        String phone = sp.getString("regisPhone", null);
        login_phone.setText(phone);

        userPresenterImp = new UserPresenterImp(new UserModelImp(),this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.login_back:
                finish();
                break;
            case R.id.tv_regis:
                Intent intent = new Intent(LoginActivity.this, RegisActivity.class);
                startActivity(intent);
                break;
            case R.id.btn_login:
                doLogin();
                break;
        }
    }

    private void doLogin() {
        //获取用户名和密码
        loginPhone = login_phone.getText().toString().trim();
        loginPwd = login_pwd.getText().toString().trim();

        //判断是否为空
        if (TextUtils.isEmpty(loginPhone)){
            Toast.makeText(LoginActivity.this,"手机号码不能为空",Toast.LENGTH_LONG).show();
        }
        if (TextUtils.isEmpty(loginPwd)){
            Toast.makeText(LoginActivity.this,"密码不能为空",Toast.LENGTH_LONG).show();
        }
        userPresenterImp.doLogin(1,loginPhone,loginPwd);
    }

    @Override
    public void success(int type, String data) {
        Gson gson = new Gson();
        LoginBean loginBean = gson.fromJson(data, LoginBean.class);
        LoginResult result = loginBean.getResult();

        if (loginBean.getStatus().equals("0000")){
            Toast.makeText(LoginActivity.this,loginBean.getMessage(),Toast.LENGTH_LONG).show();
            String pic = result.getHeadPic();
            String nickName = result.getNickName();
            sp.edit().putString("pic",pic).putString("nickName",nickName).commit();
            finish();
        }else{
            Toast.makeText(LoginActivity.this,"登录失败",Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void fail(int type, String error) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        userPresenterImp.destory();
    }
}

注册

package android.bw.com.app0405.activity;

import android.bw.com.app0405.R;
import android.bw.com.app0405.bean.RegisBean;
import android.bw.com.app0405.mvp.model.UserModelImp;
import android.bw.com.app0405.mvp.presenter.UserPresenterImp;
import android.bw.com.app0405.mvp.view.UserView;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.gson.Gson;

public class RegisActivity extends AppCompatActivity implements View.OnClickListener, UserView {


    private TextView regis_back;
    private EditText regis_phone;
    private EditText regis_pwd;
    private TextView tv_login;
    private Button btn_regis;
    private UserPresenterImp userPresenterImp;
    private SharedPreferences sp;
    private String regisPhone;
    private String regisPwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_regis);

        //初始化控件
        regis_back = findViewById(R.id.regis_back);
        regis_phone = findViewById(R.id.regis_phone);
        regis_pwd = findViewById(R.id.regis_pwd);
        tv_login = findViewById(R.id.tv_login);
        btn_regis = findViewById(R.id.btn_regis);

        //监听事件
        regis_back.setOnClickListener(this);
        tv_login.setOnClickListener(this);
        btn_regis.setOnClickListener(this);

        userPresenterImp = new UserPresenterImp(new UserModelImp(),this);

        sp = getSharedPreferences("user", MODE_PRIVATE);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.regis_back:
                finish();
                break;
            case R.id.tv_login:
                finish();
                break;
            case R.id.btn_regis:
                doRegis();
                break;
        }
    }

    private void doRegis() {
        //获取用户名和密码
        regisPhone = regis_phone.getText().toString().trim();
        regisPwd = regis_pwd.getText().toString().trim();

        //判断是否为空
        if (TextUtils.isEmpty(regisPhone)){
            Toast.makeText(RegisActivity.this,"手机号码不能为空",Toast.LENGTH_LONG).show();
        }
        if (TextUtils.isEmpty(regisPwd)){
            Toast.makeText(RegisActivity.this,"密码不能为空",Toast.LENGTH_LONG).show();
        }

        userPresenterImp.doRegis(0, regisPhone, regisPwd);
    }

    @Override
    public void success(int type, String data) {
        Gson gson = new Gson();
        RegisBean regisBean = gson.fromJson(data, RegisBean.class);
        if (regisBean.getStatus().equals("0000")){
            Toast.makeText(RegisActivity.this,regisBean.getMessage(),Toast.LENGTH_LONG).show();
            sp.edit().putString("regisPhone",regisPhone).commit();
            sp.edit().clear();
            finish();
        }else{
            Toast.makeText(RegisActivity.this,"注册失败",Toast.LENGTH_LONG).show();
        }
    }

    @Override
    public void fail(int type, String error) {

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        userPresenterImp.destory();
    }
}

水波纹

package android.bw.com.app0405.view;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

/**
 * 作者:ww
 * <p>
 * 邮箱:2973627661@qq.com
 * <p>
 * 时间:on 2019/4/5 20:34
 */
public class WaterLine extends View {

    private Paint paint;
    private Path path;
    private float mX;

    public WaterLine(Context context) {
        super(context);
        init(context);
    }

    public WaterLine(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    private void init(Context context) {
        paint = new Paint();
        path = new Path();

        paint.setStrokeWidth(5);
        paint.setAntiAlias(true);
        paint.setColor(Color.CYAN);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        path.reset();

        //起始位置
        path.moveTo(getLeft(),getBottom());

        double mPi = Math.PI * 2 / getRight();
        //波动位置
        mX=mX-0.1f;
        for (int x=0;x<=getRight();x+=20){
            double y = (10*Math.sin(mPi * x + mX)+10);
            path.lineTo(x, (float) y);
            if (listener!=null){
                listener.Animation(y);
            }
        }

        //结束位置
        path.lineTo(getRight(),getBottom());

        canvas.drawPath(path,paint);
        postInvalidateDelayed(20);
    }

    private AnimationListener listener;
    public void setAnimationListener(AnimationListener listener){
        this.listener=listener;
    }
    public interface AnimationListener{
        void Animation(double y);
    }
}

水波纹的属性动画设置fragment

package android.bw.com.app0405.fragment;

import android.bw.com.app0405.R;
import android.bw.com.app0405.activity.LoginActivity;
import android.bw.com.app0405.view.WaterLine;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;

/**
 * 作者:ww
 * <p>
 * 邮箱:2973627661@qq.com
 * <p>
 * 时间:on 2019/4/5 20:16
 */
public class MyFragment extends Fragment implements View.OnClickListener {

    private ImageView login_img;
    private TextView login_name;
    private WaterLine water_line;
    private SharedPreferences sp;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=View.inflate(getActivity(), R.layout.my_fragment,null);
        //初始化控件
        login_img = view.findViewById(R.id.login_img);
        login_name = view.findViewById(R.id.login_name);
        water_line = view.findViewById(R.id.water_line);

        //监听
        login_img.setOnClickListener(this);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        water_line.setAnimationListener(new WaterLine.AnimationListener() {
            @Override
            public void Animation(double y) {
                RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) login_img.getLayoutParams();
                params.setMargins(0, (int) y,0,0);
                login_img.setLayoutParams(params);
            }
        });

        //接受回传值
        sp = getActivity().getSharedPreferences("user", Context.MODE_PRIVATE);
        String pic = sp.getString("pic", null);
        String nickName = sp.getString("nickName", null);
        Glide.with(getActivity()).load(pic).apply(new RequestOptions().circleCrop()).into(login_img);
        login_name.setText(nickName);
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(getActivity(), LoginActivity.class);
        startActivity(intent);
    }
}

商家,全选和反选,价格联动(Fragment)

package android.bw.com.app0405.fragment;

import android.bw.com.app0405.R;
import android.bw.com.app0405.adapter.ShowAdapter;
import android.bw.com.app0405.mvp.model.UserModelImp;
import android.bw.com.app0405.mvp.presenter.UserPresenterImp;
import android.bw.com.app0405.mvp.view.UserView;
import android.bw.com.app0405.shopBean.Shop;
import android.bw.com.app0405.shopBean.ShopData;
import android.bw.com.app0405.shopBean.ShopList;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;

import com.google.gson.Gson;

import java.util.ArrayList;

/**
 * 作者:ww
 * <p>
 * 邮箱:2973627661@qq.com
 * <p>
 * 时间:on 2019/4/5 20:16
 */
public class ShouFragment extends Fragment implements UserView {

    private RecyclerView shou_recycle_view;
    private CheckBox check_all;
    private TextView shou_money;
    private TextView tv_js;
    private UserPresenterImp userPresenterImp;
    private ShowAdapter showAdapter;
    private ArrayList<ShopData> shopData;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=View.inflate(getActivity(), R.layout.shou_fragment,null);
        //初始化控件
        shou_recycle_view = view.findViewById(R.id.shou_recycle_view);
        check_all = view.findViewById(R.id.check_all);
        shou_money = view.findViewById(R.id.shou_money);
        tv_js = view.findViewById(R.id.tv_js);

        userPresenterImp = new UserPresenterImp(new UserModelImp(),this);
        userPresenterImp.doShopCar(2);

        //创建适配器
        showAdapter = new ShowAdapter(getActivity());
        //设置适配器
        shou_recycle_view.setAdapter(showAdapter);

        //布局管理器
        LinearLayoutManager manager=new LinearLayoutManager(getActivity());
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        shou_recycle_view.setLayoutManager(manager);

        //全选和反选
        check_all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                double allPrice=0;
                int allNum=0;

                boolean checked = check_all.isChecked();
                for (int i=0;i<shopData.size();i++){
                    shopData.get(i).setCheckbox(checked);
                    ArrayList<ShopList> list = shopData.get(i).getList();//获取对应的商品
                    for (int j=0;j<list.size();j++){
                        list.get(j).setCheckbox(checked);
                        if (checked){
                            double price = list.get(j).getPrice();
                            int num = list.get(j).getNum();
                            allPrice=allPrice+price*num;
                            allNum=allNum+num;
                        }else{
                            allPrice=0;
                            allNum=0;
                        }
                    }
                }
                shou_money.setText(allPrice+"");
                tv_js.setText("去结算:("+allNum+")");
                showAdapter.setList(shopData);
            }
        });

        //商家的全选和反选,价格联动
        showAdapter.setOnCallBack(new ShowAdapter.OnCallBack() {
            @Override
            public void changeData(ArrayList<ShopData> list) {
                double allPrice=0;
                int allNum=0;

                for (int i=0;i<list.size();i++){
                    boolean checkbox = list.get(i).isCheckbox();
                    if (checkbox){
                        ArrayList<ShopList> listCar = list.get(i).getList();
                        for (int j=0;j<listCar.size();j++){
                            double price = listCar.get(j).getPrice();
                            int num = listCar.get(j).getNum();
                            allPrice=allPrice+price*num;
                            allNum=allNum+num;
                        }
                    }else{//商家未选中,商品选中了
                        ArrayList<ShopList> listCar = list.get(i).getList();
                        for (int j=0;j<listCar.size();j++){
                            if (listCar.get(j).isCheckbox()){
                                double price = listCar.get(j).getPrice();
                                int num = listCar.get(j).getNum();
                                allPrice=allPrice+price*num;
                                allNum=allNum+num;
                            }
                        }
                    }
                }
                shou_money.setText(allPrice+"");
                tv_js.setText("去结算:("+allNum+")");
            }
        });
        return view;
    }

    @Override
    public void success(int type, String data) {
        Gson gson = new Gson();
        Shop shop = gson.fromJson(data, Shop.class);
        shopData = shop.getData();
        Log.i("aaa",shopData.toString());
        shopData.remove(0);

        showAdapter.setList(this.shopData);
    }

    @Override
    public void fail(int type, String error) {

    }
}

商家的适配器

package android.bw.com.app0405.adapter;

import android.bw.com.app0405.R;
import android.bw.com.app0405.shopBean.ShopData;
import android.bw.com.app0405.shopBean.ShopList;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * 作者:ww
 * <p>
 * 邮箱:2973627661@qq.com
 * <p>
 * 时间:on 2019/4/6 10:46
 */
public class ShowAdapter extends RecyclerView.Adapter<ShowAdapter.ShopViewHolder> {
    private Context context;
    private ArrayList<ShopData> list = new ArrayList<>();

    public ShowAdapter(Context context) {
        this.context = context;
    }

    @NonNull
    @Override
    public ShowAdapter.ShopViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view = View.inflate(context, R.layout.shop_item, null);
        ShopViewHolder shopViewHolder = new ShopViewHolder(view);
        return shopViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final ShowAdapter.ShopViewHolder shopViewHolder, final int i) {
        shopViewHolder.shop_checkbox.setChecked(list.get(i).isCheckbox());
        shopViewHolder.shop_title.setText(list.get(i).getSellerName());

        final ArrayList<ShopList> shopLists = this.list.get(i).getList();

        //创建适配器
        final ShopCarItemAdapter itemAdapter = new ShopCarItemAdapter(shopLists, context);
        //设置适配器
        shopViewHolder.child_recycle_view.setAdapter(itemAdapter);

        //设置布局管理器
        LinearLayoutManager manager = new LinearLayoutManager(context);
        manager.setOrientation(LinearLayoutManager.VERTICAL);
        shopViewHolder.child_recycle_view.setLayoutManager(manager);

        itemAdapter.setonCallBackListener(new ShopCarItemAdapter.onCallBackListener() {
            @Override
            public void changeData(ArrayList<ShopList> shopLists) {
                int checkNum = 0;

                for (int i = 0; i < shopLists.size(); i++) {
                    boolean checkbox = shopLists.get(i).isCheckbox();
                    if (checkbox) {
                        checkNum++;
                    }
                }
                if (checkNum == shopLists.size()) {
                    shopViewHolder.shop_checkbox.setChecked(true);
                } else {
                    shopViewHolder.shop_checkbox.setChecked(false);
                }
                if (callBack!=null){
                    callBack.changeData(list);//回传给调用页面
                }
            }
        });

        //商家的复选框
        shopViewHolder.shop_checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean checked = shopViewHolder.shop_checkbox.isChecked();

                list.get(i).setCheckbox(checked);//赋值
                ArrayList<ShopList> listshop = ShowAdapter.this.list.get(i).getList();
                for (int i = 0; i < listshop.size(); i++) {
                    listshop.get(i).setCheckbox(checked);
                }

                if (callBack!=null){
                    callBack.changeData(list);//回传给调用页面
                }
                //刷新适配器
                notifyItemChanged(i);
            }

        });
    }

    @Override
    public int getItemCount() {
        return list.size();
    }

    public void setList(ArrayList<ShopData> list) {
        this.list = list;
        notifyDataSetChanged();
    }

    public class ShopViewHolder extends RecyclerView.ViewHolder {

        private CheckBox shop_checkbox;
        private TextView shop_title;
        private RecyclerView child_recycle_view;

        public ShopViewHolder(@NonNull View itemView) {
            super(itemView);
            shop_checkbox = itemView.findViewById(R.id.shop_checkbox);
            shop_title = itemView.findViewById(R.id.shop_title);
            child_recycle_view = itemView.findViewById(R.id.child_recycle_view);
        }
    }

    public OnCallBack callBack;

    public void setOnCallBack(OnCallBack callBack) {
        this.callBack=callBack;
    }

    public interface OnCallBack {
        void changeData(ArrayList<ShopData> list);
    }
}

商品的适配器

package android.bw.com.app0405.adapter;

import android.bw.com.app0405.R;
import android.bw.com.app0405.shopBean.ShopList;
import android.bw.com.app0405.view.AddView;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;

import java.util.ArrayList;

/**
 * 作者:ww
 * <p>
 * 邮箱:2973627661@qq.com
 * <p>
 * 时间:on 2019/4/6 15:08
 */
public class ShopCarItemAdapter extends RecyclerView.Adapter<ShopCarItemAdapter.ItemViewHolder> {
    private ArrayList<ShopList> shopLists=new ArrayList<>();
    private Context context;

    public ShopCarItemAdapter(ArrayList<ShopList> shopLists, Context context) {
        this.shopLists = shopLists;
        this.context = context;
    }

    @NonNull
    @Override
    public ShopCarItemAdapter.ItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view=View.inflate(context, R.layout.item_layout,null);
        ItemViewHolder itemViewHolder = new ItemViewHolder(view);
        return itemViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull final ShopCarItemAdapter.ItemViewHolder itemViewHolder, final int i) {
        itemViewHolder.item_checkbox.setChecked(shopLists.get(i).isCheckbox());
        itemViewHolder.item_title.setText(shopLists.get(i).getTitle());
        itemViewHolder.item_price.setText("¥"+shopLists.get(i).getPrice()+"");
        Glide.with(context).load(shopLists.get(i).getImages()).into(itemViewHolder.item_img);

        itemViewHolder.add_view.setNum(shopLists.get(i).getNum());

        //商品的选中状态
        itemViewHolder.item_checkbox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                boolean checked = itemViewHolder.item_checkbox.isChecked();
                shopLists.get(i).setCheckbox(checked);

                if (backListener!=null){
                    backListener.changeData(shopLists);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return shopLists.size();
    }

    public class ItemViewHolder extends RecyclerView.ViewHolder {

        private  CheckBox item_checkbox;
        private  ImageView item_img;
        private  TextView item_title;
        private  TextView item_price;
        private  AddView add_view;

        public ItemViewHolder(@NonNull View itemView) {
            super(itemView);
            item_checkbox = itemView.findViewById(R.id.item_checkbox);
            item_img = itemView.findViewById(R.id.item_img);
            item_title = itemView.findViewById(R.id.item_title);
            item_price = itemView.findViewById(R.id.item_price);
            add_view = itemView.findViewById(R.id.add_view);
        }
    }

    public onCallBackListener backListener;
    public void setonCallBackListener(onCallBackListener backListener){
        this.backListener=backListener;
    }
    public interface onCallBackListener{
        void changeData(ArrayList<ShopList> shopLists);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值