ADD week 5
This commit is contained in:
		
							
								
								
									
										163
									
								
								02-Easy5/E5/sources/androidx/transition/GhostViewPort.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								02-Easy5/E5/sources/androidx/transition/GhostViewPort.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| package androidx.transition; | ||||
|  | ||||
| import android.graphics.Canvas; | ||||
| import android.graphics.Matrix; | ||||
| import android.view.View; | ||||
| import android.view.ViewGroup; | ||||
| import android.view.ViewTreeObserver; | ||||
| import androidx.core.view.ViewCompat; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| class GhostViewPort extends ViewGroup implements GhostView { | ||||
|     private Matrix mMatrix; | ||||
|     private final ViewTreeObserver.OnPreDrawListener mOnPreDrawListener; | ||||
|     int mReferences; | ||||
|     ViewGroup mStartParent; | ||||
|     View mStartView; | ||||
|     final View mView; | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void onLayout(boolean z, int i, int i2, int i3, int i4) { | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.transition.GhostView | ||||
|     public void reserveEndViewTransition(ViewGroup viewGroup, View view) { | ||||
|         this.mStartParent = viewGroup; | ||||
|         this.mStartView = view; | ||||
|     } | ||||
|  | ||||
|     void setMatrix(Matrix matrix) { | ||||
|         this.mMatrix = matrix; | ||||
|     } | ||||
|  | ||||
|     GhostViewPort(View view) { | ||||
|         super(view.getContext()); | ||||
|         this.mOnPreDrawListener = new ViewTreeObserver.OnPreDrawListener() { // from class: androidx.transition.GhostViewPort.1 | ||||
|             @Override // android.view.ViewTreeObserver.OnPreDrawListener | ||||
|             public boolean onPreDraw() { | ||||
|                 ViewCompat.postInvalidateOnAnimation(GhostViewPort.this); | ||||
|                 if (GhostViewPort.this.mStartParent == null || GhostViewPort.this.mStartView == null) { | ||||
|                     return true; | ||||
|                 } | ||||
|                 GhostViewPort.this.mStartParent.endViewTransition(GhostViewPort.this.mStartView); | ||||
|                 ViewCompat.postInvalidateOnAnimation(GhostViewPort.this.mStartParent); | ||||
|                 GhostViewPort.this.mStartParent = null; | ||||
|                 GhostViewPort.this.mStartView = null; | ||||
|                 return true; | ||||
|             } | ||||
|         }; | ||||
|         this.mView = view; | ||||
|         setWillNotDraw(false); | ||||
|         setLayerType(2, null); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View, androidx.transition.GhostView | ||||
|     public void setVisibility(int i) { | ||||
|         super.setVisibility(i); | ||||
|         if (getGhostView(this.mView) == this) { | ||||
|             ViewUtils.setTransitionVisibility(this.mView, i == 0 ? 4 : 0); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void onAttachedToWindow() { | ||||
|         super.onAttachedToWindow(); | ||||
|         setGhostView(this.mView, this); | ||||
|         this.mView.getViewTreeObserver().addOnPreDrawListener(this.mOnPreDrawListener); | ||||
|         ViewUtils.setTransitionVisibility(this.mView, 4); | ||||
|         if (this.mView.getParent() != null) { | ||||
|             ((View) this.mView.getParent()).invalidate(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.ViewGroup, android.view.View | ||||
|     protected void onDetachedFromWindow() { | ||||
|         this.mView.getViewTreeObserver().removeOnPreDrawListener(this.mOnPreDrawListener); | ||||
|         ViewUtils.setTransitionVisibility(this.mView, 0); | ||||
|         setGhostView(this.mView, null); | ||||
|         if (this.mView.getParent() != null) { | ||||
|             ((View) this.mView.getParent()).invalidate(); | ||||
|         } | ||||
|         super.onDetachedFromWindow(); | ||||
|     } | ||||
|  | ||||
|     @Override // android.view.View | ||||
|     protected void onDraw(Canvas canvas) { | ||||
|         CanvasUtils.enableZ(canvas, true); | ||||
|         canvas.setMatrix(this.mMatrix); | ||||
|         ViewUtils.setTransitionVisibility(this.mView, 0); | ||||
|         this.mView.invalidate(); | ||||
|         ViewUtils.setTransitionVisibility(this.mView, 4); | ||||
|         drawChild(canvas, this.mView, getDrawingTime()); | ||||
|         CanvasUtils.enableZ(canvas, false); | ||||
|     } | ||||
|  | ||||
|     static void copySize(View view, View view2) { | ||||
|         ViewUtils.setLeftTopRightBottom(view2, view2.getLeft(), view2.getTop(), view2.getLeft() + view.getWidth(), view2.getTop() + view.getHeight()); | ||||
|     } | ||||
|  | ||||
|     static GhostViewPort getGhostView(View view) { | ||||
|         return (GhostViewPort) view.getTag(R.id.ghost_view); | ||||
|     } | ||||
|  | ||||
|     static void setGhostView(View view, GhostViewPort ghostViewPort) { | ||||
|         view.setTag(R.id.ghost_view, ghostViewPort); | ||||
|     } | ||||
|  | ||||
|     static void calculateMatrix(View view, ViewGroup viewGroup, Matrix matrix) { | ||||
|         ViewGroup viewGroup2 = (ViewGroup) view.getParent(); | ||||
|         matrix.reset(); | ||||
|         ViewUtils.transformMatrixToGlobal(viewGroup2, matrix); | ||||
|         matrix.preTranslate(-viewGroup2.getScrollX(), -viewGroup2.getScrollY()); | ||||
|         ViewUtils.transformMatrixToLocal(viewGroup, matrix); | ||||
|     } | ||||
|  | ||||
|     static GhostViewPort addGhost(View view, ViewGroup viewGroup, Matrix matrix) { | ||||
|         int i; | ||||
|         GhostViewHolder ghostViewHolder; | ||||
|         if (!(view.getParent() instanceof ViewGroup)) { | ||||
|             throw new IllegalArgumentException("Ghosted views must be parented by a ViewGroup"); | ||||
|         } | ||||
|         GhostViewHolder holder = GhostViewHolder.getHolder(viewGroup); | ||||
|         GhostViewPort ghostView = getGhostView(view); | ||||
|         if (ghostView == null || (ghostViewHolder = (GhostViewHolder) ghostView.getParent()) == holder) { | ||||
|             i = 0; | ||||
|         } else { | ||||
|             i = ghostView.mReferences; | ||||
|             ghostViewHolder.removeView(ghostView); | ||||
|             ghostView = null; | ||||
|         } | ||||
|         if (ghostView == null) { | ||||
|             if (matrix == null) { | ||||
|                 matrix = new Matrix(); | ||||
|                 calculateMatrix(view, viewGroup, matrix); | ||||
|             } | ||||
|             ghostView = new GhostViewPort(view); | ||||
|             ghostView.setMatrix(matrix); | ||||
|             if (holder == null) { | ||||
|                 holder = new GhostViewHolder(viewGroup); | ||||
|             } else { | ||||
|                 holder.popToOverlayTop(); | ||||
|             } | ||||
|             copySize(viewGroup, holder); | ||||
|             copySize(viewGroup, ghostView); | ||||
|             holder.addGhostView(ghostView); | ||||
|             ghostView.mReferences = i; | ||||
|         } else if (matrix != null) { | ||||
|             ghostView.setMatrix(matrix); | ||||
|         } | ||||
|         ghostView.mReferences++; | ||||
|         return ghostView; | ||||
|     } | ||||
|  | ||||
|     static void removeGhost(View view) { | ||||
|         GhostViewPort ghostView = getGhostView(view); | ||||
|         if (ghostView != null) { | ||||
|             int i = ghostView.mReferences - 1; | ||||
|             ghostView.mReferences = i; | ||||
|             if (i <= 0) { | ||||
|                 ((GhostViewHolder) ghostView.getParent()).removeView(ghostView); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user