From 42ea59771a54d2591df0a6dd3936dda669be99ae Mon Sep 17 00:00:00 2001 From: gs <3129367635@qq.com> Date: 星期一, 08 七月 2024 12:23:48 +0800 Subject: [PATCH] 会议统计接入增加,删除,修改接口 --- app/src/main/java/com/application/zhangshi_app_android/widget/Node.java | 144 ++++++++++++++++++++++++++++++++--------------- 1 files changed, 98 insertions(+), 46 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 47f0894..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,6 +1,9 @@ package com.application.zhangshi_app_android.widget; +import android.content.Context; +import android.graphics.Color; import android.graphics.Path; +import android.graphics.Typeface; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,12 +12,16 @@ 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.ItemFamilyMemberBinding; import java.util.ArrayList; import java.util.LinkedList; @@ -27,10 +34,11 @@ * @desc */ public abstract class Node{ + protected Context context; 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); // 杩炵嚎鎷愯 鍦嗚鍗婂緞 @@ -55,20 +63,20 @@ protected final List<Path> forkPathList = new ArrayList<>();//鍒嗗弶杩炵嚎 protected final List<View> viewList = new ArrayList<>(); - public Node(HomeRootBean member){ + public Node(Context context,HomeRootBean member){ + this.context = context; this.member = member; if (member != null) { // 閫掑綊鍒涘缓瀛愯妭鐐� if (member.getChildList() != null && member.getChildList().size() > 0) { - // 鎵�鏈夊彲瑙佺殑瀛愯妭鐐归渶瑕佺殑瀹介珮鎬诲拰 for (HomeRootBean child : member.getChildList()) { // 鏍规嵁鏄惁鏈夐厤鍋跺垱寤轰笉鍚岀殑鑺傜偣 if (child != null) { Node node; if (child.getSpouse() != null) { - node = new DoubleNode(child); + node = new DoubleNode(context,child); } else { - node = new SimpleNode(child); + node = new SimpleNode(context,child); } node.parent = this; children.add(node); @@ -88,7 +96,7 @@ if (this.parent!=null){ throw new RuntimeException("鍙兘鍒濆鍖栨牴鑺傜偣"); } - //鏍规嵁鍙鎬ф壘鍒版渶鍚庝竴涓涓�瀛愯妭鐐癸紝鍗虫渶涓婅竟鐨勮妭鐐� + //鏍规嵁鍙鎬ф壘鍒版渶鍚庝竴涓涓�瀛愯妭鐐癸紝鍗虫渶鍙充笂杈圭殑鑺傜偣 setViewPositionRecursion(getVisibleTopNode(), this,x,y); } @@ -96,7 +104,7 @@ * 閫掑綊璁剧疆鎵�鏈夎妭鐐圭殑浣嶇疆 * @param topNode 椤堕儴鑺傜偣锛岃繖棰楄妭鐐规爲鐨勬渶涓婅竟鐨勮妭鐐� * @param rootNode 鏍硅妭鐐癸紝杩欓鑺傜偣鏍戠殑鏍硅妭鐐� - * startNode 蹇呴』鏄� topNode 绁栧厛鑺傜偣 + * rootNode 蹇呴』鏄� topNode 绁栧厛鑺傜偣 * @param x 鏁撮鑺傜偣鏍戠殑x鍧愭爣 * @param y 鏁撮鑺傜偣鏍戠殑y鍧愭爣 */ @@ -108,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鐨勪綅缃紝閫掑綊璁剧疆鎵�鏈夎妭鐐圭殑浣嶇疆 @@ -125,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){ @@ -140,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++) { @@ -153,6 +166,8 @@ } } totalCenterY = (min + max) / 2; + }else{ + totalCenterY = centerYList.get(0); } if (parentNode.children.size() > 1) { @@ -166,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){ @@ -185,39 +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(AppManager.getAppManager().currentActivity()); - 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)); + LayoutInflater inflater = LayoutInflater.from(context); + 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); + familyMemberView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + 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); - // 璁剧疆鑺傜偣鍐呭 - tv_generation.setText(String.valueOf(bean.getIdentity())); - if (bean.getImg() != null) { - GlideUtil.loadImage(bean.getImg(), iv_avatar); + } + // 浣跨敤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); + } } - tv_name.setText(bean.getNickName()); - tv_name.setSelected(true); + 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); @@ -392,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); @@ -447,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(); @@ -466,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