164 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| 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);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |