| | |
| | | import android.animation.Animator; |
| | | import android.animation.AnimatorListenerAdapter; |
| | | import android.animation.ValueAnimator; |
| | | import android.text.Editable; |
| | | import android.text.TextWatcher; |
| | | import android.view.View; |
| | | import android.view.ViewGroup; |
| | | import android.view.animation.Animation; |
| | |
| | | import android.widget.FrameLayout; |
| | | import android.widget.PopupWindow; |
| | | |
| | | import androidx.lifecycle.Observer; |
| | | |
| | | import com.android.app_base.manager.AppManager; |
| | | import com.android.app_base.utils.ScreenSizeUtils; |
| | | import com.android.app_base.utils.Utils; |
| | | import com.application.zhangshi_app_android.BR; |
| | | import com.application.zhangshi_app_android.R; |
| | | import com.application.zhangshi_app_android.bean.GrowthExperienceAutobiographyBean; |
| | | import com.application.zhangshi_app_android.bean.HealthCareNotesContentBean; |
| | | import com.application.zhangshi_app_android.databinding.ActivityHealthCareBinding; |
| | | import com.application.zhangshi_app_android.ui.DLBaseActivity; |
| | | import com.github.gzuliyujiang.wheelpicker.OptionPicker; |
| | | import com.github.gzuliyujiang.wheelpicker.contract.OnOptionPickedListener; |
| | | import com.google.android.material.tabs.TabLayout; |
| | | |
| | | import java.util.Arrays; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @author Ljj |
| | |
| | | AppManager.getAppManager().startActivity(AnnualHealthStatusActivity.class); |
| | | } |
| | | }); |
| | | |
| | | binding.ivOperate.setOnClickListener(v -> { |
| | | popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,118) +binding.ivOperate.getWidth(),0); |
| | | view.findViewById(R.id.tv_edit).setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | popupWindow.dismiss(); |
| | | viewModel.setTypeLiveData(true); |
| | | } |
| | | }); |
| | | |
| | | binding.tvSex.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | List<String> list = Arrays.asList("女","男"); |
| | | OptionPicker picker = getOptionPicker(list); |
| | | picker.setTitle("性别"); |
| | | picker.setOnOptionPickedListener(new OnOptionPickedListener() { |
| | | @Override |
| | | public void onOptionPicked(int position, Object item) { |
| | | binding.tvSex.setText(item.toString()); |
| | | } |
| | | }); |
| | | picker.show(); |
| | | } |
| | | }); |
| | | |
| | | final int SCROLL_THRESHOLD = 400; // 滑动阈值,按钮在滑动超过该阈值后开始根据超出阈值距离渐渐显示出来 |
| | | final int SCROLL_DISTANCE = 400; // 按钮从隐藏到全部显示出来需要滑动的距离 |
| | | binding.fabMoveToTop.setAlpha(0f); |
| | | binding.nestedScrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() { |
| | | @Override |
| | | public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { |
| | | // 当滑动距离超过阈值一半时,开始慢慢显示按钮 |
| | | if (scrollY >= SCROLL_THRESHOLD) { |
| | | // 根据滑动距离设置按钮透明度 |
| | | float alpha = Math.min(1.0f, (float) (scrollY - SCROLL_THRESHOLD) / SCROLL_DISTANCE); |
| | | binding.fabMoveToTop.setAlpha(alpha); |
| | | } else { |
| | | binding.fabMoveToTop.setAlpha(0f); |
| | | } |
| | | } |
| | | }); |
| | | binding.fabMoveToTop.setOnClickListener(v -> { |
| | | // 点击按钮返回顶部 |
| | | binding.nestedScrollView.smoothScrollTo(0, 0); |
| | | }); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void initData() { |
| | | |
| | | viewModel.getHealthCareBaseInfo(); |
| | | viewModel.getHealthCareLifeHabits(); |
| | | viewModel.getHealthCareNursingExamination(); |
| | | viewModel.getHealthCareExistingProblems(); |
| | | viewModel.getHealthCareNotesContent(); |
| | | } |
| | | |
| | | @Override |
| | | public void initLiveDataObserve() { |
| | | System.out.println("我"+binding.ivA.isClickable()); |
| | | viewModel.getIsLifeHabitsExpendedLiveData().observe(this, aBoolean -> { |
| | | if (aBoolean){ |
| | | binding.ivLifeHabitsFold.setOnClickListener(view -> { |
| | | binding.layoutTitleLifeHabits.setOnClickListener(view -> { |
| | | collapseView(binding.cardLifeHabits,binding.layoutTitleLifeHabits); |
| | | viewModel.getIsLifeHabitsExpendedLiveData().setValue(false); |
| | | }); |
| | | }else { |
| | | binding.ivLifeHabitsFold.setOnClickListener(view -> { |
| | | binding.layoutTitleLifeHabits.setOnClickListener(view -> { |
| | | expendView(binding.cardLifeHabits); |
| | | viewModel.getIsLifeHabitsExpendedLiveData().setValue(true); |
| | | }); |
| | |
| | | }); |
| | | viewModel.getIsHealthExpendedLiveData().observe(this, aBoolean -> { |
| | | if (aBoolean){ |
| | | binding.ivHealthFold.setOnClickListener(view -> { |
| | | binding.layoutTitleHealth.setOnClickListener(view -> { |
| | | collapseView(binding.cardHealth,binding.layoutTitleHealth); |
| | | viewModel.getIsHealthExpendedLiveData().setValue(false); |
| | | }); |
| | | }else { |
| | | binding.ivHealthFold.setOnClickListener(view -> { |
| | | binding.layoutTitleHealth.setOnClickListener(view -> { |
| | | expendView(binding.cardHealth); |
| | | viewModel.getIsHealthExpendedLiveData().setValue(true); |
| | | }); |
| | |
| | | }); |
| | | viewModel.getIsNursingExpendedLiveData().observe(this, aBoolean -> { |
| | | if (aBoolean){ |
| | | binding.ivNursingFold.setOnClickListener(view -> { |
| | | binding.layoutTitleNursing.setOnClickListener(view -> { |
| | | collapseView(binding.cardNursing,binding.layoutTitleNursing); |
| | | viewModel.getIsNursingExpendedLiveData().setValue(false); |
| | | }); |
| | | }else { |
| | | binding.ivNursingFold.setOnClickListener(view -> { |
| | | binding.layoutTitleNursing.setOnClickListener(view -> { |
| | | expendView(binding.cardNursing); |
| | | viewModel.getIsNursingExpendedLiveData().setValue(true); |
| | | }); |
| | | } |
| | | }); |
| | | viewModel.getTypeLiveData().observe(this, new Observer<Boolean>() { |
| | | @Override |
| | | public void onChanged(Boolean aBoolean) { |
| | | if (aBoolean){ |
| | | binding.ivOperate.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | viewModel.setTypeLiveData(false); |
| | | viewModel.save(); |
| | | } |
| | | }); |
| | | }else { |
| | | binding.ivOperate.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(HealthCareActivity.this,118) +binding.ivOperate.getWidth(),0); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | }); |
| | | viewModel.getHealthCareNotesContentBeanLiveData().observe(this, new Observer<HealthCareNotesContentBean>() { |
| | | @Override |
| | | public void onChanged(HealthCareNotesContentBean bean) { |
| | | List<String> tabList = bean.getTabList(); |
| | | List<String> contentList = bean.getContentList(); |
| | | if (tabList==null||tabList.size() == 0 ){ |
| | | binding.etFill.setVisibility(View.GONE); |
| | | return; |
| | | }else { |
| | | binding.etFill.setVisibility(View.VISIBLE); |
| | | } |
| | | binding.tabLayout.removeAllTabs(); |
| | | for (int i = 0; i < tabList.size(); i++) { |
| | | String tabText = tabList.get(i); |
| | | TabLayout.Tab tab = binding.tabLayout.newTab().setText(tabText); |
| | | if (i % 2 == 0){ |
| | | tab.view.setBackgroundResource(R.drawable.selector_tab_background_pink); |
| | | }else { |
| | | tab.view.setBackgroundResource(R.drawable.selector_tab_background_blue); |
| | | } |
| | | //取消tab的长按显示文本 |
| | | tab.view.setOnLongClickListener(new View.OnLongClickListener() { |
| | | @Override |
| | | public boolean onLongClick(View v) { |
| | | return true; |
| | | } |
| | | }); |
| | | binding.tabLayout.addTab(tab); |
| | | } |
| | | binding.etFill.setText(contentList.get(0)); |
| | | binding.tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { |
| | | @Override |
| | | public void onTabSelected(TabLayout.Tab tab) { |
| | | binding.etFill.setText(contentList.get(tab.getPosition())); |
| | | binding.etFill.clearFocus(); |
| | | } |
| | | |
| | | @Override |
| | | public void onTabUnselected(TabLayout.Tab tab) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onTabReselected(TabLayout.Tab tab) { |
| | | |
| | | } |
| | | }); |
| | | binding.etFill.addTextChangedListener(new TextWatcher() { |
| | | @Override |
| | | public void beforeTextChanged(CharSequence s, int start, int count, int after) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onTextChanged(CharSequence s, int start, int before, int count) { |
| | | int select = binding.tabLayout.getSelectedTabPosition(); |
| | | contentList.set(select,s.toString()); |
| | | viewModel.getHealthCareNotesContentBeanLiveData().getValue().setContent(contentList); |
| | | } |
| | | |
| | | @Override |
| | | public void afterTextChanged(Editable s) { |
| | | |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | binding.ivA.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | System.out.println("点击了A"); |
| | | System.out.println(v.isClickable()); |
| | | System.out.println(viewModel.getTypeLiveData().getValue()); |
| | | } |
| | | }); |
| | | } |
| | |
| | | public void collapseView(View initialView,View collapsedView){ |
| | | int initialHeight = initialView.getMeasuredHeight(); |
| | | int collapsedHeight = collapsedView.getMeasuredHeight(); |
| | | int distanceToCollapse = (int) (initialHeight - collapsedHeight); |
| | | |
| | | Animation a = new Animation() { |
| | | @Override |
| | | protected void applyTransformation(float interpolatedTime, Transformation t) { |
| | | if (interpolatedTime == 1){ |
| | | } |
| | | initialView.getLayoutParams().height = (int) (initialHeight - (distanceToCollapse * interpolatedTime)); |
| | | initialView.requestLayout(); |
| | | } |
| | | |
| | | @Override |
| | | public boolean willChangeBounds() { |
| | | return true; |
| | | } |
| | | }; |
| | | a.setDuration(500); |
| | | initialView.startAnimation(a); |
| | | Utils.pullCollapse(initialView,initialHeight,collapsedHeight); |
| | | } |
| | | public void expendView(View initialView){ |
| | | int initialHeight = initialView.getMeasuredHeight(); |
| | | initialView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); |
| | | int targetHeight = initialView.getMeasuredHeight(); |
| | | |
| | | ValueAnimator animator = ValueAnimator.ofInt(initialHeight,targetHeight); |
| | | animator.addUpdateListener(animation -> { |
| | | initialView.getLayoutParams().height = (int) animation.getAnimatedValue(); |