From ecaf8069072e71db4bff94671e72764b211d6af1 Mon Sep 17 00:00:00 2001
From: Linjiajia <319408893@qq.com>
Date: 星期四, 26 十月 2023 00:43:51 +0800
Subject: [PATCH] 功能完善

---
 app/src/main/java/com/application/zhangshi_app_android/widget/Node.java |   93 +++++++++++++++++++++++++++++-----------------
 1 files changed, 58 insertions(+), 35 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..5c98ec3 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,15 @@
 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.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 +33,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 +62,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);
@@ -96,7 +103,7 @@
      * 閫掑綊璁剧疆鎵�鏈夎妭鐐圭殑浣嶇疆
      * @param topNode 椤堕儴鑺傜偣锛岃繖棰楄妭鐐规爲鐨勬渶涓婅竟鐨勮妭鐐�
      * @param rootNode 鏍硅妭鐐癸紝杩欓鑺傜偣鏍戠殑鏍硅妭鐐�
-     *                startNode 蹇呴』鏄� topNode 绁栧厛鑺傜偣
+     *                rootNode 蹇呴』鏄� topNode 绁栧厛鑺傜偣
      * @param x 鏁撮鑺傜偣鏍戠殑x鍧愭爣
      * @param y 鏁撮鑺傜偣鏍戠殑y鍧愭爣
      */
@@ -185,39 +192,51 @@
 
     // 璁剧疆瀵瑰簲绫诲瀷鑺傜偣鐨勪綅缃� 鐢卞瓙绫诲疄鐜�
     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;
+        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);
+            }
+            // 浣跨敤databinding鏃犳硶娴嬮噺view鐨勫甫鍐呭鐨勫噯纭楂橈紝鎵�浠ヨ繖閲屾墜鍔ㄨ缃竴涓�
+            binding.tvGeneration.setText(bean.getIdentity()+"");
         }
-        // 鑾峰彇甯冨眬涓殑缁勪欢
-        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.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);
@@ -447,15 +466,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 +481,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