From e8a1ef4066003128cfed93e8c2debd2efc431ab9 Mon Sep 17 00:00:00 2001 From: ScorpioMiku <1056992492@qq.com> Date: Mon, 1 Oct 2018 16:19:24 +0800 Subject: [PATCH] information bar --- .../nutritionmaster/bean/MyUser.java | 4 +- .../nutritionmaster/modules/MainActivity.java | 127 ++++++++++++++--- .../nutritionmaster/utils/CalculateUtils.java | 5 +- .../nutritionmaster/utils/ConstantUtils.java | 130 ++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 23 ++-- app/src/main/res/values/strings.xml | 1 + 6 files changed, 253 insertions(+), 37 deletions(-) diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MyUser.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MyUser.java index acc43bb..76db8ba 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MyUser.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/bean/MyUser.java @@ -36,10 +36,10 @@ public class MyUser { private boolean is_active; private String date_joined; private int sex; - private String occupation_name; + private String occupation_name = ""; private List groups; private List user_permissions; - private int age; + private int age = 0; private float weight = 0; private float height = 0; diff --git a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java index 66e94ef..fc081e9 100644 --- a/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java +++ b/app/src/main/java/com/example/ninefourone/nutritionmaster/modules/MainActivity.java @@ -18,25 +18,20 @@ import android.widget.RelativeLayout; import android.widget.TextView; import com.ToxicBakery.viewpager.transforms.CubeOutTransformer; -import com.bigkoo.pickerview.builder.OptionsPickerBuilder; -import com.bigkoo.pickerview.listener.OnOptionsSelectListener; -import com.bigkoo.pickerview.view.OptionsPickerView; +import com.akexorcist.roundcornerprogressbar.RoundCornerProgressBar; import com.cb.ratingbar.CBRatingBar; import com.example.ninefourone.nutritionmaster.NutritionMaster; import com.example.ninefourone.nutritionmaster.R; import com.example.ninefourone.nutritionmaster.adapter.HomePagerAdapter; import com.example.ninefourone.nutritionmaster.base.BaseActivity; -import com.example.ninefourone.nutritionmaster.bean.Occupation; import com.example.ninefourone.nutritionmaster.camera.FoodMaterialCamera; import com.example.ninefourone.nutritionmaster.modules.addinformation.AddActivity; import com.example.ninefourone.nutritionmaster.modules.addinformation.AddInformationActivity; -import com.example.ninefourone.nutritionmaster.modules.information.InformationActivity; -import com.example.ninefourone.nutritionmaster.ui.InformationDialog; import com.example.ninefourone.nutritionmaster.ui.NoScrollViewPager; +import com.example.ninefourone.nutritionmaster.utils.CalculateUtils; import com.example.ninefourone.nutritionmaster.utils.ConstantUtils; import com.example.ninefourone.nutritionmaster.utils.MessageUtils; import com.example.ninefourone.nutritionmaster.utils.PermissionUtils; -import com.example.ninefourone.nutritionmaster.utils.WebUtils; import com.flyco.tablayout.SlidingTabLayout; import com.github.mikephil.charting.charts.RadarChart; import com.github.mikephil.charting.components.Description; @@ -48,7 +43,6 @@ import com.github.mikephil.charting.data.RadarDataSet; import com.github.mikephil.charting.data.RadarEntry; import com.github.mikephil.charting.formatter.IndexAxisValueFormatter; import com.github.siyamed.shapeimageview.CircularImageView; -import com.google.gson.Gson; import com.miguelcatalan.materialsearchview.MaterialSearchView; import com.mxn.soul.flowingdrawer_core.ElasticDrawer; import com.mxn.soul.flowingdrawer_core.FlowingDrawer; @@ -57,16 +51,12 @@ import com.nightonke.boommenu.BoomButtons.OnBMClickListener; import com.nightonke.boommenu.BoomMenuButton; import com.orhanobut.logger.Logger; -import java.io.IOException; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.Response; public class MainActivity extends BaseActivity { @@ -79,8 +69,8 @@ public class MainActivity extends BaseActivity { NoScrollViewPager viewPager; @BindView(R.id.sliding_tab_layout) SlidingTabLayout slidingTabLayout; - @BindView(R.id.cb_rating_bar) - CBRatingBar cbRatingBar; + @BindView(R.id.score_bar) + CBRatingBar scoreBar; @BindView(R.id.toolbar_user_avatar) CircularImageView toolbarUserAvatar; @BindView(R.id.drawer_user_avatar) @@ -112,6 +102,12 @@ public class MainActivity extends BaseActivity { LinearLayout addInforLl; @BindView(R.id.show_information) LinearLayout showInformation; + @BindView(R.id.bmi_bar) + RoundCornerProgressBar bmiBar; + @BindView(R.id.height_bar) + RoundCornerProgressBar heightBar; + @BindView(R.id.weight_bar) + RoundCornerProgressBar weightBar; @Override @@ -153,7 +149,8 @@ public class MainActivity extends BaseActivity { * 初始化ViewPager */ private void initViewPager() { - HomePagerAdapter homePagerAdapter = new HomePagerAdapter(getSupportFragmentManager(), this); + HomePagerAdapter homePagerAdapter = new HomePagerAdapter(getSupportFragmentManager(), + this); viewPager.setOffscreenPageLimit(3); viewPager.setAdapter(homePagerAdapter); //CubeInTransformer 内旋 @@ -318,7 +315,8 @@ public class MainActivity extends BaseActivity { .listener(new OnBMClickListener() { @Override public void onBoomButtonClick(int index) { - Intent cameraIntent = new Intent(MainActivity.this, FoodMaterialCamera.class); + Intent cameraIntent = new Intent(MainActivity.this, + FoodMaterialCamera.class); startActivity(cameraIntent); } }); @@ -354,7 +352,8 @@ public class MainActivity extends BaseActivity { } @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, + @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); MessageUtils.MakeToast("权限赋予成功"); } @@ -366,7 +365,8 @@ public class MainActivity extends BaseActivity { * @param view */ - @OnClick({R.id.navigation_layout, R.id.add_information_button, R.id.information_layout, R.id.user_occupation_text, R.id.adder_infor}) + @OnClick({R.id.navigation_layout, R.id.add_information_button, R.id.information_layout, + R.id.user_occupation_text, R.id.adder_infor}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.navigation_layout: @@ -389,15 +389,104 @@ public class MainActivity extends BaseActivity { } + @RequiresApi(api = Build.VERSION_CODES.M) @Override protected void backChangeData() { super.backChangeData(); initInforView(); - if (NutritionMaster.user.getOccupation_name() == null) { + if (NutritionMaster.user.getOccupation_name().equals("")) { } else { userOccupationText.setText("职业: " + NutritionMaster.user.getOccupation_name()); } + initInformationBar(); + } + /** + * 初始化个人信息的条状bar还有状态星级的UI + */ + @RequiresApi(api = Build.VERSION_CODES.M) + private void initInformationBar() { + + scoreBar.setCanTouch(false); + if (NutritionMaster.user.getHeight() != 0 && NutritionMaster.user.getAge() != 0) { + + float maxBmi = 40.0f; + float maxHeight = 250.0f; + float maxWeight = 130.0f; + + float height = NutritionMaster.user.getHeight(); + float weight = NutritionMaster.user.getWeight(); + float age = NutritionMaster.user.getAge(); + float averageWeight = 0; + float averageHeight = 0; + float averageBmi = 0; + int index = (int) (age >= 20 ? ((age - 20) / 5 + 17) : (age - 3)); + if (NutritionMaster.user.getSex() == 0) { + //女性 + averageWeight = ConstantUtils.averageGirlWeight.get(index); + averageHeight = ConstantUtils.averageGirlHeight.get(index); + averageBmi = CalculateUtils.BMI(averageHeight, averageWeight); + } else if (NutritionMaster.user.getSex() == 1) { + averageWeight = ConstantUtils.averageBoyWeight.get(index); + averageHeight = ConstantUtils.averageBoyHeight.get(index); + averageBmi = CalculateUtils.BMI(averageHeight, averageWeight); + } else { + Logger.e("非男非女?"); + return; + } + float bmi = CalculateUtils.BMI(height, weight); + + float bmiAverage = averageBmi / maxBmi * 100.0f; + float bmiSelf = bmi / maxBmi * 100.0f; + + if (bmiAverage > bmiSelf) { + bmiBar.setMax(100); + bmiBar.setSecondaryProgress(bmiAverage); + bmiBar.setProgress(bmiSelf); + } else { + bmiBar.setMax(100); + bmiBar.setSecondaryProgress(bmiSelf); + bmiBar.setProgress(bmiAverage); + bmiBar.setProgressColor(getColor(R.color.color_bar_deeper)); + bmiBar.setSecondaryProgressColor(getColor(R.color.color_bar_self)); + } + + + float heightAverage = averageHeight / maxHeight * 100.0f; + float heightSelf = height / maxHeight * 100.0f; + if (heightAverage > heightSelf) { + heightBar.setMax(100); + heightBar.setSecondaryProgress(heightAverage); + heightBar.setProgress(heightSelf); + } else { + heightBar.setMax(100); + heightBar.setSecondaryProgress(heightSelf); + heightBar.setProgress(heightAverage); + heightBar.setProgressColor(getColor(R.color.color_bar_deeper)); + heightBar.setSecondaryProgressColor(getColor(R.color.color_bar_self)); + } + + + float weightAverage = averageWeight / maxWeight * 100.0f; + float weightSelf = weight / maxWeight * 100.0f; + if (weightAverage>weightSelf){ + weightBar.setMax(100); + weightBar.setSecondaryProgress(weightAverage); + weightBar.setProgress(weightSelf); + }else{ + weightBar.setMax(100); + weightBar.setSecondaryProgress(weightSelf); + weightBar.setProgress(weightAverage); + weightBar.setProgressColor(getColor(R.color.color_bar_deeper)); + weightBar.setSecondaryProgressColor(getColor(R.color.color_bar_self)); + } + + Logger.d("bmi:" + averageBmi / maxBmi * 100.0f + "|" + bmi / maxBmi * 100.0f + "\n" + + "height:" + averageHeight / maxHeight * 100.0f + "|" + height / maxHeight * 100.0f + "\n" + + "weight" + averageWeight / maxWeight * 100.0f + "|" + weight / maxWeight * 100.0f); + + + } } } 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 65f90e8..d51d33f 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,5 +1,7 @@ package com.example.ninefourone.nutritionmaster.utils; +import com.orhanobut.logger.Logger; + /** * Created by ScorpioMiku on 2018/8/29. */ @@ -14,8 +16,9 @@ public class CalculateUtils { */ public static float BMI(float height, float weight) { if (height > 10) { - height = height / 100; + height = height / 100.0f; } +// Logger.d(height+"|"+weight / (height * height)); return weight / (height * height); } 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 8468b4c..2d0da9c 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 @@ -76,4 +76,134 @@ public class ConstantUtils { sexList.add("女"); } + /** + * 全国平均体重 index 0 对应 3岁 + */ + public static ArrayList averageBoyHeight = new ArrayList<>(); + + public static ArrayList averageGirlHeight = new ArrayList<>(); + + static { + averageBoyHeight.add(new Float(102.2)); + averageBoyHeight.add(new Float(107.8)); + averageBoyHeight.add(new Float(114)); + averageBoyHeight.add(new Float(119.7)); + averageBoyHeight.add(new Float(126.6)); + averageBoyHeight.add(new Float(132)); + averageBoyHeight.add(new Float(137.2)); + averageBoyHeight.add(new Float(142.1)); + averageBoyHeight.add(new Float(148.1)); + averageBoyHeight.add(new Float(154.5)); + averageBoyHeight.add(new Float(161.4)); + averageBoyHeight.add(new Float(166.5)); + averageBoyHeight.add(new Float(169.8)); + averageBoyHeight.add(new Float(171.4)); + averageBoyHeight.add(new Float(172.1)); + averageBoyHeight.add(new Float(172)); + averageBoyHeight.add(new Float(172.4)); //index 16 age 19 + + averageBoyHeight.add(new Float(171.9)); + averageBoyHeight.add(new Float(171.6)); + averageBoyHeight.add(new Float(170.8)); + averageBoyHeight.add(new Float(169.9)); + averageBoyHeight.add(new Float(169)); + averageBoyHeight.add(new Float(168.7)); + averageBoyHeight.add(new Float(168.3)); + averageBoyHeight.add(new Float(167.5)); + + + averageGirlHeight.add(new Float(100.9)); + averageGirlHeight.add(new Float(106.5)); + averageGirlHeight.add(new Float(112.7)); + averageGirlHeight.add(new Float(118.1)); + averageGirlHeight.add(new Float(125.1)); + averageGirlHeight.add(new Float(130.5)); + averageGirlHeight.add(new Float(136.3)); + averageGirlHeight.add(new Float(142.6)); + averageGirlHeight.add(new Float(149.3)); + averageGirlHeight.add(new Float(153.7)); + averageGirlHeight.add(new Float(157)); + averageGirlHeight.add(new Float(158.7)); + averageGirlHeight.add(new Float(159.4)); + averageGirlHeight.add(new Float(159.8)); + averageGirlHeight.add(new Float(159.9)); + averageGirlHeight.add(new Float(159.4)); + averageGirlHeight.add(new Float(160.4));//index 16 age 19 + + + averageGirlHeight.add(new Float(159.9));//index 17 age 24 + averageGirlHeight.add(new Float(159.6)); + averageGirlHeight.add(new Float(159.1)); + averageGirlHeight.add(new Float(158.5)); + averageGirlHeight.add(new Float(157.8)); + averageGirlHeight.add(new Float(157.7)); + averageGirlHeight.add(new Float(157.7));// index 23 age 54 + averageGirlHeight.add(new Float(156.8)); //index 24 age 59 + + } + + /** + * 全国平均体重 + */ + public static ArrayList averageBoyWeight = new ArrayList<>(); + public static ArrayList averageGirlWeight = new ArrayList<>(); + + static { + averageBoyWeight.add(new Float(16.6)); + averageBoyWeight.add(new Float(18.3)); + averageBoyWeight.add(new Float(20.6)); + averageBoyWeight.add(new Float(23)); + averageBoyWeight.add(new Float(26.6)); + averageBoyWeight.add(new Float(29.9)); + averageBoyWeight.add(new Float(33.6)); + averageBoyWeight.add(new Float(37.2)); + averageBoyWeight.add(new Float(41.9)); + averageBoyWeight.add(new Float(16.6)); + averageBoyWeight.add(new Float(52)); + averageBoyWeight.add(new Float(56.2)); + averageBoyWeight.add(new Float(59.5)); + averageBoyWeight.add(new Float(61.5)); + averageBoyWeight.add(new Float(63.3)); + averageBoyWeight.add(new Float(63.5)); + averageBoyWeight.add(new Float(63.5)); + + averageBoyWeight.add(new Float(67.2)); + averageBoyWeight.add(new Float(70.4)); + averageBoyWeight.add(new Float(71.4)); + averageBoyWeight.add(new Float(71.5)); + averageBoyWeight.add(new Float(71.2)); + averageBoyWeight.add(new Float(71.2)); + averageBoyWeight.add(new Float(10.6)); + averageBoyWeight.add(new Float(69.1)); + + + averageGirlWeight.add(new Float(15.9)); + averageGirlWeight.add(new Float(17.5)); + averageGirlWeight.add(new Float(19.6)); + averageGirlWeight.add(new Float(21.6)); + averageGirlWeight.add(new Float(24.7)); + averageGirlWeight.add(new Float(27.6)); + averageGirlWeight.add(new Float(31.3)); + averageGirlWeight.add(new Float(35.5)); + averageGirlWeight.add(new Float(40.6)); + averageGirlWeight.add(new Float(44.5)); + averageGirlWeight.add(new Float(18)); + averageGirlWeight.add(new Float(50.4)); + averageGirlWeight.add(new Float(51.6)); + averageGirlWeight.add(new Float(52.7)); + averageGirlWeight.add(new Float(53)); + averageGirlWeight.add(new Float(52.6)); + averageGirlWeight.add(new Float(52.4)); + + averageGirlWeight.add(new Float(53.8)); + averageGirlWeight.add(new Float(55.3)); + averageGirlWeight.add(new Float(56.8)); + averageGirlWeight.add(new Float(57.8)); + averageGirlWeight.add(new Float(59)); + averageGirlWeight.add(new Float(59.7)); + averageGirlWeight.add(new Float(60.4)); + averageGirlWeight.add(new Float(59.6)); + + } + } diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 415ffc5..924c1b9 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -208,14 +208,13 @@ + android:layout_height="wrap_content"> @@ -446,7 +443,7 @@ @@ -457,6 +454,7 @@ @@ -532,7 +527,7 @@ @@ -543,6 +538,7 @@ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 17d6b3f..65fe929 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,6 +1,7 @@ NutritionMaster 当前值 + 全国均值 标准值 M1080.3,453.7c-77.2,88.2 -214.6,234.4 -214.6,234.4s22,160.2 35.3,269.7c5.9,55.9 -37.5,80.1 -86,58.1 -92.6,-43.4 -233.7,-111 -265.3,-126.4 -32.3,14.7 -174.2,81.6 -267.5,124.9 -49.2,21.3 -92.6,-2.2 -87.5,-58.1 12.5,-109.5 35.3,-269 35.3,-269S91.1,541.9 13.2,453.7c-27.9,-32.3 -9.6,-77.9 44.8,-86 111.7,-19.8 284.4,-51.4 284.4,-51.4s94.8,-163.1 154.3,-263.1C529.8,-7.8 552.6,-0.4 556.3,1c10.3,2.9 26.5,15.4 47,52.2 58.8,99.9 152.1,263.1 152.1,263.1s170.5,31.6 280.7,51.4c53.6,8.1 71.3,54.4 44.1,86z 食材识别