From b2dc509d5530a9af3b48d7dce7db1e7bf66b06d5 Mon Sep 17 00:00:00 2001 From: Linjiajia <319408893@qq.com> Date: 星期三, 28 二月 2024 17:26:58 +0800 Subject: [PATCH] 1、修复新增家庭设备时存在备忘录问题\n2、旅游模块新增加“感言”、“其他费用”、“备注”字段 --- app/src/main/java/com/application/zhangshi_app_android/widget/Node.java | 159 +++++++++++++++++++++++++++++------------------------ 1 files changed, 87 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/com/application/zhangshi_app_android/widget/Node.java b/app/src/main/java/com/application/zhangshi_app_android/widget/Node.java index 1f4276f..26f2acc 100644 --- a/app/src/main/java/com/application/zhangshi_app_android/widget/Node.java +++ b/app/src/main/java/com/application/zhangshi_app_android/widget/Node.java @@ -1,27 +1,27 @@ package com.application.zhangshi_app_android.widget; import android.content.Context; +import android.graphics.Color; import android.graphics.Path; -import android.graphics.drawable.ColorDrawable; -import android.view.Gravity; +import android.graphics.Typeface; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.PopupWindow; import android.widget.TextView; import androidx.constraintlayout.utils.widget.ImageFilterView; +import androidx.core.content.res.ResourcesCompat; import androidx.databinding.DataBindingUtil; import com.android.app_base.manager.AppManager; +import com.android.app_base.manager.UserManager; import com.android.app_base.utils.GlideUtil; import com.android.app_base.utils.ScreenSizeUtils; import com.application.zhangshi_app_android.R; import com.application.zhangshi_app_android.bean.HomeRootBean; -import com.application.zhangshi_app_android.databinding.PopBasicInformationBinding; -import com.otaliastudios.zoom.ZoomLayout; +import com.application.zhangshi_app_android.databinding.ItemFamilyMemberBinding; import java.util.ArrayList; import java.util.LinkedList; @@ -38,7 +38,7 @@ protected HomeRootBean member;//鎴愬憳 protected Node parent;//鐖惰妭鐐� protected final List<Node> children = new ArrayList<>(); //瀛愯妭鐐� - + protected HomeMindMapLayout.OnItemClickListener onItemClickListener; protected static final int pathLength = ScreenSizeUtils.dip2px(20);// 杩炵嚎鐨勪竴鑸暱搴� protected static final int cornerRadius = ScreenSizeUtils.dip2px(5); // 杩炵嚎鎷愯 鍦嗚鍗婂緞 @@ -69,7 +69,6 @@ if (member != null) { // 閫掑綊鍒涘缓瀛愯妭鐐� if (member.getChildList() != null && member.getChildList().size() > 0) { - // 鎵�鏈夊彲瑙佺殑瀛愯妭鐐归渶瑕佺殑瀹介珮鎬诲拰 for (HomeRootBean child : member.getChildList()) { // 鏍规嵁鏄惁鏈夐厤鍋跺垱寤轰笉鍚岀殑鑺傜偣 if (child != null) { @@ -97,7 +96,7 @@ if (this.parent!=null){ throw new RuntimeException("鍙兘鍒濆鍖栨牴鑺傜偣"); } - //鏍规嵁鍙鎬ф壘鍒版渶鍚庝竴涓涓�瀛愯妭鐐癸紝鍗虫渶涓婅竟鐨勮妭鐐� + //鏍规嵁鍙鎬ф壘鍒版渶鍚庝竴涓涓�瀛愯妭鐐癸紝鍗虫渶鍙充笂杈圭殑鑺傜偣 setViewPositionRecursion(getVisibleTopNode(), this,x,y); } @@ -105,7 +104,7 @@ * 閫掑綊璁剧疆鎵�鏈夎妭鐐圭殑浣嶇疆 * @param topNode 椤堕儴鑺傜偣锛岃繖棰楄妭鐐规爲鐨勬渶涓婅竟鐨勮妭鐐� * @param rootNode 鏍硅妭鐐癸紝杩欓鑺傜偣鏍戠殑鏍硅妭鐐� - * startNode 蹇呴』鏄� topNode 绁栧厛鑺傜偣 + * rootNode 蹇呴』鏄� topNode 绁栧厛鑺傜偣 * @param x 鏁撮鑺傜偣鏍戠殑x鍧愭爣 * @param y 鏁撮鑺傜偣鏍戠殑y鍧愭爣 */ @@ -117,12 +116,17 @@ } //鍥犱负 y 鏄暣棰楄妭鐐规爲鐨剏鍧愭爣锛屾甯告儏鍐典笅锛寉閮戒細鏄� 椤堕儴鑺傜偣topNode 鐨剏鍧愭爣 - //浣嗘槸 鏈変竴绉嶆儏鍐碉紝灏辨槸椤堕儴鑺傜偣topNode鍒氬ソ鏄牴鑺傜偣rootNode鐨勫敮涓�瀛愯妭鐐癸紝涓攖opNode娌℃湁閰嶅伓锛屾鏃秚opNode鐨勯珮搴︽瘮rootNode鐨勯珮搴﹀皬锛屾墍浠ユ鏃剁殑y鏄痳ootNode鐨剏鍧愭爣 - int centerY; - if (rootNode.height >= topNode.height && rootNode == topNode.parent && rootNode.children.size() == 1){ - centerY = y + rootNode.getAllVisibleHeight()/2; - }else { - centerY = y + topNode.getAllVisibleHeight()/2; + int centerY = y + topNode.getAllVisibleHeight()/2; + //浣嗘槸 鏈変竴绉嶆儏鍐碉紝灏辨槸椤堕儴鑺傜偣topNode娌℃湁閰嶅伓锛屽鏋渢opNode鐨勭鍏堣妭鐐规湁閰嶅伓锛屼笖娌℃湁澶氬瓙瀛欙紝姝ゆ椂topNode鐨勯珮搴︽瘮鏈夐厤鍋剁殑绁栧厛鑺傜偣鐨勯珮搴﹀皬锛屾墍浠ユ鏃剁殑y鏄珮搴︽渶楂樼殑绁栧厛鑺傜偣鐨剏鍧愭爣 + if (topNode instanceof SimpleNode){ + Node tempNode = topNode.parent; + while (tempNode.children.size() == 1){ + if (tempNode.height > topNode.height){ + centerY = y + tempNode.getAllVisibleHeight()/2; + break; + } + tempNode = tempNode.parent; + } } topNode.setViewPosition(x + topNode.getToSpecifyNodeWidth(rootNode) - topNode.width, centerY); // 鏍规嵁topNode鐨勪綅缃紝閫掑綊璁剧疆鎵�鏈夎妭鐐圭殑浣嶇疆 @@ -134,7 +138,7 @@ for (Node child : parentNode.children) { if (child == node) { centerYList.add(child.centerY); - currentBottom = currentBottom + node.getVisibleTopNode().top + node.getAllVisibleHeight(); + currentBottom = currentBottom + child.getVisibleTop() + child.getAllVisibleHeight(); continue; } if (!child.isVisible){ @@ -149,7 +153,7 @@ //鍙栨渶澶у�笺�佹渶灏忓�� 鍜� 鐨勪腑闂� int totalCenterY = 0; - if (centerYList.size() > 0) { + if (centerYList.size() > 1) { int min = centerYList.get(0); int max = centerYList.get(0); for (int i = 1; i < centerYList.size(); i++) { @@ -162,6 +166,8 @@ } } totalCenterY = (min + max) / 2; + }else{ + totalCenterY = centerYList.get(0); } if (parentNode.children.size() > 1) { @@ -175,7 +181,21 @@ node = parentNode; } } + //鑾峰彇 浠ュ綋鍓嶈妭鐐逛负鏍硅妭鐐圭殑鏍� 鐨勬渶椤堕儴鐨剏鍧愭爣 + public int getVisibleTop(){ + if (!isVisible){ + return 0; + } + if (!isExpand){ + return top; + } + if (children.size() > 0){ + return Math.min(top,children.get(0).getVisibleTop()); + } + return top; + } + //鑾峰彇 浠ュ綋鍓嶈妭鐐逛负鏍硅妭鐐圭殑鏍� 鐨勬渶娣变竴鑺傜偣 public Node getVisibleTopNode(){ Node topNode; if (!isVisible){ @@ -194,67 +214,56 @@ // 璁剧疆瀵瑰簲绫诲瀷鑺傜偣鐨勪綅缃� 鐢卞瓙绫诲疄鐜� protected abstract void setViewPosition(int x, int centerY); + // 璁剧疆鍒嗗弶鑺傜偣鐨勪綅缃� 鐢卞瓙绫诲疄鐜�,蹇呴』鍏坰etViewPosition鎵嶈兘璋冪敤 protected abstract void setForkYList(List<Integer> yList); - protected View createItemView(HomeRootBean bean) { + /** + * 鍒涘缓鑺傜偣item瑙嗗浘 + * @param bean 鑺傜偣鏁版嵁 + * @param isFamily 鏄惁鏄湰瀹舵垚鍛� + * @return 鑺傜偣item瑙嗗浘 + */ + protected View createItemView(HomeRootBean bean,boolean isFamily){ // 浣跨敤甯冨眬濉厖鍣ㄥ姞杞借妭鐐瑰竷灞� LayoutInflater inflater = LayoutInflater.from(context); - View familyMemberView = inflater.inflate(R.layout.item_family_member, null, false); - familyMemberView.measure(View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST), - View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST)); + ItemFamilyMemberBinding binding = DataBindingUtil.inflate(inflater, R.layout.item_family_member, null, false); + + View familyMemberView = binding.getRoot(); // 闃叉addView鏃讹紝鎵�鏈夎繖閲屽垱寤虹殑view鐨勯珮瀹借闄愬埗鎴愪竴鏍风殑 ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); familyMemberView.setLayoutParams(params); - if (bean == null) { - return familyMemberView; - } - // 鑾峰彇甯冨眬涓殑缁勪欢 - TextView tv_generation = familyMemberView.findViewById(R.id.tv_generation); - ImageFilterView iv_avatar = familyMemberView.findViewById(R.id.iv_avatar); - TextView tv_name = familyMemberView.findViewById(R.id.tv_name); - - // 璁剧疆鑺傜偣鍐呭 - tv_generation.setText(String.valueOf(bean.getIdentity())); - if (bean.getImg() != null) { - GlideUtil.loadImage(bean.getImg(), iv_avatar); - } - tv_name.setText(bean.getNickName()); - tv_name.setSelected(true); familyMemberView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - PopBasicInformationBinding mBinding= DataBindingUtil.inflate(inflater,R.layout.pop_basic_information,null,false); - PopupWindow popupWindow = new PopupWindow(); - // 璁剧疆甯冨眬鏂囦欢 - popupWindow.setContentView(mBinding.getRoot()); - // 涓轰簡閬垮厤閮ㄥ垎鏈哄瀷涓嶆樉绀猴紝闇�瑕侀噸鏂拌缃竴涓嬪楂� - popupWindow.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT); - popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT); - // 璁剧疆pop閫忔槑鏁堟灉 - popupWindow.setBackgroundDrawable(new ColorDrawable(0x0000)); - // 璁剧疆pop鍑哄叆鍔ㄧ敾 - popupWindow.setAnimationStyle(com.android.app_base.R.style.pop_operate); - // 璁剧疆pop鑾峰彇鐒︾偣锛屽鏋滀负false鐐瑰嚮杩斿洖鎸夐挳浼氶��鍑哄綋鍓岮ctivity锛屽鏋減op涓湁Editor鐨勮瘽锛宖ocusable蹇呴』瑕佷负true - popupWindow.setFocusable(true); - // 璁剧疆pop鍙偣鍑伙紝涓篺alse鐐瑰嚮浜嬩欢鏃犳晥锛岄粯璁や负true - popupWindow.setTouchable(true); - // 璁剧疆鐐瑰嚮pop澶栦晶娑堝け锛岄粯璁や负false锛涘湪focusable涓簍rue鏃剁偣鍑诲渚у缁堟秷澶� - popupWindow.setOutsideTouchable(false); - - mBinding.setSelfBean(bean); - mBinding.setSpouseBean(bean.getSpouse()); - ZoomLayout zoomLayout = (ZoomLayout) familyMemberView.getParent().getParent(); - popupWindow.setHeight(zoomLayout.getHeight()); - popupWindow.setWidth(zoomLayout.getWidth()); - popupWindow.showAtLocation((View) familyMemberView.getParent().getParent(), Gravity.BOTTOM,0,0); + if (onItemClickListener != null){ + onItemClickListener.onItemClick(familyMemberView,bean,isFamily); + } } }); + if (bean != null) { + binding.setBean(bean); + if (!isFamily){ + binding.tvName.setTextColor(Color.parseColor("#FF8296C5")); + //鑾峰彇瀛椾綋 + Typeface typeface = ResourcesCompat.getFont(context, com.android.app_base.R.font.roboto_regular); + binding.tvName.setTypeface(typeface); + + } + // 浣跨敤databinding鏃犳硶娴嬮噺view鐨勫甫鍐呭鐨勫噯纭楂橈紝鎵�浠ヨ繖閲屾墜鍔ㄨ缃竴涓� + binding.tvGeneration.setText(bean.getIdentity()+""); + if (bean.getNickName().equals(UserManager.getInstance().getUserName())){ + binding.cvContainer.setCardBackgroundColor(Color.parseColor("#FFCEE4FD")); + binding.ivMyself.setVisibility(View.VISIBLE); + } + } + familyMemberView.measure(View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST), + View.MeasureSpec.makeMeasureSpec((1 << 30) - 1, View.MeasureSpec.AT_MOST)); return familyMemberView; } protected ImageView createExpandIconView() { - ImageView expandView = new ImageView(AppManager.getAppManager().currentActivity()); + ImageView expandView = new ImageView(context); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(pathLength,pathLength); expandView.setLayoutParams(params); int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(pathLength, View.MeasureSpec.EXACTLY); @@ -429,13 +438,15 @@ } if (node.children.size() == 0){ return node.height; - }else { + } else { int heightSum = 0; for (Node child : node.children) { - if (getNodeTreeHeightRecursion(child,considerVisible)!=0){ + int childHeight = getNodeTreeHeightRecursion(child,considerVisible); + //濡傛灉鏈夊涓瓙鑺傜偣涓斿瓙鑺傜偣鏈夐珮搴︼紝閭d箞瀛愯妭鐐逛箣闂磋繕鏈夌珫鐩撮棿闅� + if (node.children.size() > 1 && childHeight > 0){ heightSum += verticalMargin; } - heightSum += getNodeTreeHeightRecursion(child,considerVisible); + heightSum += childHeight; } //瀛愯妭鐐规瘡涓や釜涔嬮棿杩樻湁绔栫洿闂撮殧 return Math.max(node.height,heightSum); @@ -484,15 +495,11 @@ } // 鑾峰彇 姣忎釜 itemView 鐨勫搴� - public int getItemViewWidth(){ - View itemView = createItemView(null); - return itemView.getMeasuredWidth(); - } + public abstract int getItemViewWidth(); + // 鑾峰彇 姣忎釜 itemView 鐨勯珮搴� - public int getItemViewHeight(){ - View itemView = createItemView(null); - return itemView.getMeasuredHeight(); - } + public abstract int getItemViewHeight(); + //鑾峰彇灞曞紑鎸夐挳鐨勫搴� public int getExpandIconWidth(){ ImageView expandIconView = createExpandIconView(); @@ -503,4 +510,12 @@ public int getViewWidth(){ return viewBottom - viewTop; } + + public void setOnItemClickListener(HomeMindMapLayout.OnItemClickListener onItemClickListener) { + this.onItemClickListener = onItemClickListener; + //鎵�鏈夌殑瀛愯妭鐐逛篃璁剧疆 + for (Node child : children) { + child.setOnItemClickListener(onItemClickListener); + } + } } -- Gitblit v1.9.1