ADD week 5
This commit is contained in:
		
							
								
								
									
										120
									
								
								02-Easy5/E5/sources/androidx/transition/GhostViewHolder.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								02-Easy5/E5/sources/androidx/transition/GhostViewHolder.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| package androidx.transition; | ||||
|  | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.widget.FrameLayout; | ||||
| import java.util.ArrayList; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| class GhostViewHolder extends FrameLayout { | ||||
|     private boolean mAttached; | ||||
|     private ViewGroup mParent; | ||||
|  | ||||
|     GhostViewHolder(ViewGroup viewGroup) { | ||||
|         super(viewGroup.getContext()); | ||||
|         setClipChildren(false); | ||||
|         this.mParent = viewGroup; | ||||
|         viewGroup.setTag(R.id.ghost_view_holder, this); | ||||
|         ViewGroupUtils.getOverlay(this.mParent).add(this); | ||||
|         this.mAttached = true; | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup | ||||
|     public void onViewAdded(View view) { | ||||
|         if (!this.mAttached) { | ||||
|             throw new IllegalStateException("This GhostViewHolder is detached!"); | ||||
|         } | ||||
|         super.onViewAdded(view); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup | ||||
|     public void onViewRemoved(View view) { | ||||
|         super.onViewRemoved(view); | ||||
|         if ((getChildCount() == 1 && getChildAt(0) == view) || getChildCount() == 0) { | ||||
|             this.mParent.setTag(R.id.ghost_view_holder, null); | ||||
|             ViewGroupUtils.getOverlay(this.mParent).remove(this); | ||||
|             this.mAttached = false; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     static GhostViewHolder getHolder(ViewGroup viewGroup) { | ||||
|         return (GhostViewHolder) viewGroup.getTag(R.id.ghost_view_holder); | ||||
|     } | ||||
|  | ||||
|     void popToOverlayTop() { | ||||
|         if (!this.mAttached) { | ||||
|             throw new IllegalStateException("This GhostViewHolder is detached!"); | ||||
|         } | ||||
|         ViewGroupUtils.getOverlay(this.mParent).remove(this); | ||||
|         ViewGroupUtils.getOverlay(this.mParent).add(this); | ||||
|     } | ||||
|  | ||||
|     void addGhostView(GhostViewPort ghostViewPort) { | ||||
|         ArrayList<View> arrayList = new ArrayList<>(); | ||||
|         getParents(ghostViewPort.mView, arrayList); | ||||
|         int insertIndex = getInsertIndex(arrayList); | ||||
|         if (insertIndex < 0 || insertIndex >= getChildCount()) { | ||||
|             addView(ghostViewPort); | ||||
|         } else { | ||||
|             addView(ghostViewPort, insertIndex); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private int getInsertIndex(ArrayList<View> arrayList) { | ||||
|         ArrayList arrayList2 = new ArrayList(); | ||||
|         int childCount = getChildCount() - 1; | ||||
|         int i = 0; | ||||
|         while (i <= childCount) { | ||||
|             int i2 = (i + childCount) / 2; | ||||
|             getParents(((GhostViewPort) getChildAt(i2)).mView, arrayList2); | ||||
|             if (isOnTop(arrayList, (ArrayList<View>) arrayList2)) { | ||||
|                 i = i2 + 1; | ||||
|             } else { | ||||
|                 childCount = i2 - 1; | ||||
|             } | ||||
|             arrayList2.clear(); | ||||
|         } | ||||
|         return i; | ||||
|     } | ||||
|  | ||||
|     private static boolean isOnTop(ArrayList<View> arrayList, ArrayList<View> arrayList2) { | ||||
|         if (arrayList.isEmpty() || arrayList2.isEmpty() || arrayList.get(0) != arrayList2.get(0)) { | ||||
|             return true; | ||||
|         } | ||||
|         int min = Math.min(arrayList.size(), arrayList2.size()); | ||||
|         for (int i = 1; i < min; i++) { | ||||
|             View view = arrayList.get(i); | ||||
|             View view2 = arrayList2.get(i); | ||||
|             if (view != view2) { | ||||
|                 return isOnTop(view, view2); | ||||
|             } | ||||
|         } | ||||
|         return arrayList2.size() == min; | ||||
|     } | ||||
|  | ||||
|     private static void getParents(View view, ArrayList<View> arrayList) { | ||||
|         Object parent = view.getParent(); | ||||
|         if (parent instanceof ViewGroup) { | ||||
|             getParents((View) parent, arrayList); | ||||
|         } | ||||
|         arrayList.add(view); | ||||
|     } | ||||
|  | ||||
|     private static boolean isOnTop(View view, View view2) { | ||||
|         ViewGroup viewGroup = (ViewGroup) view.getParent(); | ||||
|         int childCount = viewGroup.getChildCount(); | ||||
|         if (view.getZ() != view2.getZ()) { | ||||
|             return view.getZ() > view2.getZ(); | ||||
|         } | ||||
|         for (int i = 0; i < childCount; i++) { | ||||
|             View childAt = viewGroup.getChildAt(ViewGroupUtils.getChildDrawingOrder(viewGroup, i)); | ||||
|             if (childAt == view) { | ||||
|                 return false; | ||||
|             } | ||||
|             if (childAt == view2) { | ||||
|                 break; | ||||
|             } | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user