登录
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);
}
}