From e6014ef123350d5c0cadabe9c18e26b3d5a3c729 Mon Sep 17 00:00:00 2001
From: guoshen <3129367635@qq.com>
Date: 星期六, 29 六月 2024 15:41:25 +0800
Subject: [PATCH] Revert "Initial commit"
---
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