diff --git a/app/build.gradle b/app/build.gradle index ce04b2a..8af0acf 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -83,4 +83,7 @@ dependencies { // json解析库 implementation 'com.google.code.gson:gson:2.8.5' + //横向picker + compile 'com.github.adityagohad:HorizontalPicker:1.0.1' + } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerAdapter.java new file mode 100644 index 0000000..defeb3f --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerAdapter.java @@ -0,0 +1,42 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.ninefourone.nutritionmaster.R; + +import java.util.ArrayList; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class PickerAdapter extends RecyclerView.Adapter { + private ArrayList list; + private Context context; + + public PickerAdapter(ArrayList list, Context context) { + super(); + this.list = list; + this.context = context; + } + + @Override + public PickerHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.picker_item, parent, false); + return new PickerHolder(view); + } + + @Override + public void onBindViewHolder(PickerHolder holder, int position) { + holder.bindView(list.get(position)); + } + + @Override + public int getItemCount() { + return list.size(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerHolder.java new file mode 100644 index 0000000..2d06438 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/PickerHolder.java @@ -0,0 +1,28 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.TextView; + +import com.example.ninefourone.nutritionmaster.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class PickerHolder extends RecyclerView.ViewHolder { + @BindView(R.id.picker_item) + TextView pickerItem; + + public PickerHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + } + + public void bindView(String text) { + pickerItem.setText(text); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListAdapter.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListAdapter.java new file mode 100644 index 0000000..ed0b458 --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListAdapter.java @@ -0,0 +1,47 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; + +import java.util.ArrayList; + +import travel.ithaka.android.horizontalpickerlib.PickerLayoutManager; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class ResultListAdapter extends RecyclerView.Adapter { + private ArrayList mList; + private Context context; + private PickerLayoutManager pickerLayoutManager; + + public ResultListAdapter(ArrayList list, Context context) { + super(); + mList = list; + this.context = context; + } + + @Override + public ResultListHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.dish_result_item, parent, false); + pickerLayoutManager = new PickerLayoutManager(context, PickerLayoutManager.HORIZONTAL, false); + return new ResultListHolder(view); + } + + @Override + public void onBindViewHolder(ResultListHolder holder, int position) { + holder.bindView(mList.get(position), pickerLayoutManager); + } + + @Override + public int getItemCount() { + return mList.size(); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListHolder.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListHolder.java new file mode 100644 index 0000000..846162f --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/adapter/ResultListHolder.java @@ -0,0 +1,46 @@ +package com.example.ninefourone.nutritionmaster.adapter; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import com.bumptech.glide.Glide; +import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.github.siyamed.shapeimageview.CircularImageView; + +import butterknife.BindView; +import butterknife.ButterKnife; +import travel.ithaka.android.horizontalpickerlib.PickerLayoutManager; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class ResultListHolder extends RecyclerView.ViewHolder { + @BindView(R.id.image) + ImageView image; + @BindView(R.id.name) + TextView name; + @BindView(R.id.picker) + RecyclerView picker; + + private Context context; + + public ResultListHolder(View itemView) { + super(itemView); + ButterKnife.bind(this, itemView); + context = itemView.getContext(); + } + + public void bindView(ClassifyResult classifyResult, PickerLayoutManager pickerLayoutManager) { + pickerLayoutManager.setChangeAlpha(true); + pickerLayoutManager.setScaleDownBy(0.99f); + pickerLayoutManager.setScaleDownDistance(0.8f); + picker.setLayoutManager(pickerLayoutManager); + name.setText(classifyResult.getName()); + Glide.with(context).load("http://s2.boohee.cn/house/food_big/big_photo20155149534910631.jpg").into(image); + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java index 9106caa..6cf5f55 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ClassifyResult.java @@ -1,16 +1,27 @@ package com.example.ninefourone.nutritionmaster.bean; +import java.io.Serializable; + /** * Created by ScorpioMiku on 2018/10/4. */ -public class ClassifyResult { +public class ClassifyResult implements Serializable { - private String imgPath ; + private String imgPath; private double probability; private String name; - private int calorie; + private double calorie; private Boolean has_calorie; + private double quantity = -1; + + public double getQuantity() { + return quantity; + } + + public void setQuantity(double quantity) { + this.quantity = quantity; + } public String getImgPath() { return imgPath; @@ -36,11 +47,11 @@ public class ClassifyResult { this.name = name; } - public int getCalorie() { + public double getCalorie() { return calorie; } - public void setCalorie(int calorie) { + public void setCalorie(double calorie) { this.calorie = calorie; } @@ -55,6 +66,5 @@ public class ClassifyResult { @Override public String toString() { return name + ";置信度" + probability + ";卡路里" + calorie; - } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ResultList.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ResultList.java new file mode 100644 index 0000000..b4650dd --- /dev/null +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/ResultList.java @@ -0,0 +1,39 @@ +package com.example.ninefourone.nutritionmaster.bean; + +import java.io.Serializable; +import java.util.ArrayList; + +/** + * Created by ScorpioMiku on 2018/10/5. + */ + +public class ResultList implements Serializable { + + private ArrayList results; + + public ResultList(ArrayList results) { + super(); + this.results = results; + } + + public ArrayList getResults() { + return results; + } + + public void setResults(ArrayList results) { + this.results = results; + } + + /** + * 用于Intent传递 + */ + + @Override + public String toString() { + String log = ""; + for (int i = 0; i < results.size(); i++) { + log += results.get(i).getName() + ";卡路里" +results.get(i).getCalorie() + "\n"; + } + return log; + } +} diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java index 9887caa..08a3685 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/camera/ClassifierCamera.java @@ -19,6 +19,8 @@ import android.widget.TextView; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.example.ninefourone.nutritionmaster.bean.ResultList; +import com.example.ninefourone.nutritionmaster.modules.classifyresult.DishResultActivity; import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; import com.example.ninefourone.nutritionmaster.utils.MessageUtils; import com.example.ninefourone.nutritionmaster.utils.WebUtils; @@ -187,7 +189,7 @@ public class ClassifierCamera extends AppCompatActivity { classifyResult.setHas_calorie(jsonObject.getBoolean("has_calorie")); classifyResult.setProbability(jsonObject.getDouble("probability")); classifyResult.setName(jsonObject.getString("name")); - Logger.d(classifyResult); +// Logger.d(classifyResult); resultList.add(classifyResult); refreshUI(); } catch (Exception e) { @@ -218,7 +220,13 @@ public class ClassifierCamera extends AppCompatActivity { cameraCoverLinearlayout.setVisibility(View.VISIBLE); break; case R.id.more_takephoto_ok: + Intent intent = new Intent(ClassifierCamera.this, DishResultActivity.class); + intent.putExtra("LIST", resultList); +// intent.putExtra("LIST", ConstantUtils.testData); + startActivity(intent); resultList.clear(); + refreshUI(); + finish(); break; } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/DishResultActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/DishResultActivity.java index 0e7b61b..0887159 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/DishResultActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/classifyresult/DishResultActivity.java @@ -1,15 +1,71 @@ package com.example.ninefourone.nutritionmaster.modules.classifyresult; -import android.support.v7.app.AppCompatActivity; +import android.content.Intent; import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.widget.Button; +import android.widget.TextView; import com.example.ninefourone.nutritionmaster.R; +import com.example.ninefourone.nutritionmaster.adapter.ResultListAdapter; +import com.example.ninefourone.nutritionmaster.base.BaseActivity; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; +import com.orhanobut.logger.Logger; + +import java.util.ArrayList; + +import butterknife.BindView; + +public class DishResultActivity extends BaseActivity { + + @BindView(R.id.recycler_view) + RecyclerView recyclerView; + @BindView(R.id.calorie) + TextView calorie; + @BindView(R.id.suger) + TextView suger; + @BindView(R.id.fat) + TextView fat; + @BindView(R.id.protein) + TextView protein; + @BindView(R.id.ok_button) + Button okButton; + // private ResultList results; + private ArrayList results; + private ResultListAdapter resultListAdapter; -public class DishResultActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_dish_result); + } + + @Override + public int getLayoutId() { + return R.layout.activity_dish_result; + } + + @Override + public void initViews(Bundle savedInstanceState) { + Intent intent = getIntent(); + results = (ArrayList) intent.getSerializableExtra("LIST"); +// for (int i = 0; i < results.size(); i++) { +// Logger.d(results.get(i)); +// } + resultListAdapter = new ResultListAdapter(ConstantUtils.testData, this); + recyclerView.setAdapter(resultListAdapter); + recyclerView.setLayoutManager(new LinearLayoutManager(this)); + } + + @Override + public void initToolBar() { + + } + + @Override + public void onPointerCaptureChanged(boolean hasCapture) { + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/CalculateUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/CalculateUtils.java index 495feb0..a05881d 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/CalculateUtils.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/CalculateUtils.java @@ -1,7 +1,10 @@ package com.example.ninefourone.nutritionmaster.utils; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; +import com.example.ninefourone.nutritionmaster.bean.MyUser; import com.orhanobut.logger.Logger; +import java.util.ArrayList; import java.util.Calendar; /** @@ -70,6 +73,29 @@ public class CalculateUtils { public static int getWeek() { Calendar calendar = Calendar.getInstance(); // Logger.d( calendar.get(Calendar.DAY_OF_WEEK)); - return calendar.get(Calendar.DAY_OF_WEEK)-1; + return calendar.get(Calendar.DAY_OF_WEEK) - 1; + } + + /** + * 计算每个食物吃多少 + * @param classifyResultArrayList + * @param user + * @return + */ + + public static ArrayList getDishQuantity( + ArrayList classifyResultArrayList, MyUser user) { + double calorieSum = 0; + double[] calories = new double[classifyResultArrayList.size()]; + double[] quantitys = new double[classifyResultArrayList.size()]; + float baseQuantity = 600f; + for (int i = 0; i < classifyResultArrayList.size(); i++) { + calorieSum += classifyResultArrayList.get(i).getCalorie(); + calories[i] = classifyResultArrayList.get(i).getCalorie(); + } + for (int i = 0; i < classifyResultArrayList.size(); i++) { + classifyResultArrayList.get(i).setQuantity(calories[i] / calorieSum * baseQuantity); + } + return classifyResultArrayList; } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java index 0ff1c2a..d6e273b 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/ConstantUtils.java @@ -1,5 +1,7 @@ package com.example.ninefourone.nutritionmaster.utils; +import com.example.ninefourone.nutritionmaster.bean.ClassifyResult; + import java.util.ArrayList; /** @@ -275,4 +277,15 @@ public class ConstantUtils { public static String BD_DISH_URL = "https://aip.baidubce.com/rest/2.0/image-classify/v2/dish"; + public static ArrayList testData = new ArrayList<>(); + + static { + for (int i = 0; i < 7; i++) { + ClassifyResult classifyResult = new ClassifyResult(); + classifyResult.setName("酱肉丝" + i); + classifyResult.setProbability(0.5 + i); + classifyResult.setCalorie(274 + i * 10); + testData.add(classifyResult); + } + } } diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java index 1da17e5..d0ec119 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/utils/MessageUtils.java @@ -3,6 +3,9 @@ package com.example.ninefourone.nutritionmaster.utils; import android.widget.Toast; import com.example.ninefourone.nutritionmaster.NutritionMaster; +import com.orhanobut.logger.Logger; + +import java.util.List; /** * Created by ScorpioMiku on 2018/8/26. @@ -13,4 +16,6 @@ public class MessageUtils { public static void MakeToast(String message) { Toast.makeText(NutritionMaster.getInstance(), message, Toast.LENGTH_SHORT).show(); } + + } diff --git a/app/src/main/res/layout/activity_dish_result.xml b/app/src/main/res/layout/activity_dish_result.xml index 0ab7033..a2a3606 100644 --- a/app/src/main/res/layout/activity_dish_result.xml +++ b/app/src/main/res/layout/activity_dish_result.xml @@ -10,27 +10,32 @@ + android:layout_height="0dp" + android:layout_weight="3"> @@ -64,6 +69,7 @@ @@ -139,11 +148,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" - android:text="大卡" + android:text="克" android:textColor="#fff" /> @@ -191,11 +202,13 @@