ADD week 5
This commit is contained in:
@ -0,0 +1,265 @@
|
||||
package androidx.constraintlayout.motion.widget;
|
||||
|
||||
import android.graphics.Rect;
|
||||
import android.util.Log;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import androidx.constraintlayout.motion.widget.ViewTransition;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.constraintlayout.widget.ConstraintSet;
|
||||
import androidx.constraintlayout.widget.SharedValues;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public class ViewTransitionController {
|
||||
ArrayList<ViewTransition.Animate> animations;
|
||||
private final MotionLayout mMotionLayout;
|
||||
private HashSet<View> mRelatedViews;
|
||||
private ArrayList<ViewTransition> viewTransitions = new ArrayList<>();
|
||||
private String TAG = "ViewTransitionController";
|
||||
ArrayList<ViewTransition.Animate> removeList = new ArrayList<>();
|
||||
|
||||
public ViewTransitionController(MotionLayout layout) {
|
||||
this.mMotionLayout = layout;
|
||||
}
|
||||
|
||||
public void add(ViewTransition viewTransition) {
|
||||
this.viewTransitions.add(viewTransition);
|
||||
this.mRelatedViews = null;
|
||||
if (viewTransition.getStateTransition() == 4) {
|
||||
listenForSharedVariable(viewTransition, true);
|
||||
} else if (viewTransition.getStateTransition() == 5) {
|
||||
listenForSharedVariable(viewTransition, false);
|
||||
}
|
||||
}
|
||||
|
||||
void remove(int id) {
|
||||
ViewTransition viewTransition;
|
||||
Iterator<ViewTransition> it = this.viewTransitions.iterator();
|
||||
while (true) {
|
||||
if (!it.hasNext()) {
|
||||
viewTransition = null;
|
||||
break;
|
||||
} else {
|
||||
viewTransition = it.next();
|
||||
if (viewTransition.getId() == id) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (viewTransition != null) {
|
||||
this.mRelatedViews = null;
|
||||
this.viewTransitions.remove(viewTransition);
|
||||
}
|
||||
}
|
||||
|
||||
private void viewTransition(ViewTransition vt, View... view) {
|
||||
int currentState = this.mMotionLayout.getCurrentState();
|
||||
if (vt.mViewTransitionMode == 2) {
|
||||
vt.applyTransition(this, this.mMotionLayout, currentState, null, view);
|
||||
return;
|
||||
}
|
||||
if (currentState == -1) {
|
||||
Log.w(this.TAG, "No support for ViewTransition within transition yet. Currently: " + this.mMotionLayout.toString());
|
||||
return;
|
||||
}
|
||||
ConstraintSet constraintSet = this.mMotionLayout.getConstraintSet(currentState);
|
||||
if (constraintSet == null) {
|
||||
return;
|
||||
}
|
||||
vt.applyTransition(this, this.mMotionLayout, currentState, constraintSet, view);
|
||||
}
|
||||
|
||||
void enableViewTransition(int id, boolean enable) {
|
||||
Iterator<ViewTransition> it = this.viewTransitions.iterator();
|
||||
while (it.hasNext()) {
|
||||
ViewTransition next = it.next();
|
||||
if (next.getId() == id) {
|
||||
next.setEnabled(enable);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
boolean isViewTransitionEnabled(int id) {
|
||||
Iterator<ViewTransition> it = this.viewTransitions.iterator();
|
||||
while (it.hasNext()) {
|
||||
ViewTransition next = it.next();
|
||||
if (next.getId() == id) {
|
||||
return next.isEnabled();
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void viewTransition(int id, View... views) {
|
||||
ArrayList arrayList = new ArrayList();
|
||||
Iterator<ViewTransition> it = this.viewTransitions.iterator();
|
||||
ViewTransition viewTransition = null;
|
||||
while (it.hasNext()) {
|
||||
ViewTransition next = it.next();
|
||||
if (next.getId() == id) {
|
||||
for (View view : views) {
|
||||
if (next.checkTags(view)) {
|
||||
arrayList.add(view);
|
||||
}
|
||||
}
|
||||
if (!arrayList.isEmpty()) {
|
||||
viewTransition(next, (View[]) arrayList.toArray(new View[0]));
|
||||
arrayList.clear();
|
||||
}
|
||||
viewTransition = next;
|
||||
}
|
||||
}
|
||||
if (viewTransition == null) {
|
||||
Log.e(this.TAG, " Could not find ViewTransition");
|
||||
}
|
||||
}
|
||||
|
||||
void touchEvent(MotionEvent event) {
|
||||
ViewTransition viewTransition;
|
||||
int currentState = this.mMotionLayout.getCurrentState();
|
||||
if (currentState == -1) {
|
||||
return;
|
||||
}
|
||||
if (this.mRelatedViews == null) {
|
||||
this.mRelatedViews = new HashSet<>();
|
||||
Iterator<ViewTransition> it = this.viewTransitions.iterator();
|
||||
while (it.hasNext()) {
|
||||
ViewTransition next = it.next();
|
||||
int childCount = this.mMotionLayout.getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
View childAt = this.mMotionLayout.getChildAt(i);
|
||||
if (next.matchesView(childAt)) {
|
||||
childAt.getId();
|
||||
this.mRelatedViews.add(childAt);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
float x = event.getX();
|
||||
float y = event.getY();
|
||||
Rect rect = new Rect();
|
||||
int action = event.getAction();
|
||||
ArrayList<ViewTransition.Animate> arrayList = this.animations;
|
||||
if (arrayList != null && !arrayList.isEmpty()) {
|
||||
Iterator<ViewTransition.Animate> it2 = this.animations.iterator();
|
||||
while (it2.hasNext()) {
|
||||
it2.next().reactTo(action, x, y);
|
||||
}
|
||||
}
|
||||
if (action == 0 || action == 1) {
|
||||
ConstraintSet constraintSet = this.mMotionLayout.getConstraintSet(currentState);
|
||||
Iterator<ViewTransition> it3 = this.viewTransitions.iterator();
|
||||
while (it3.hasNext()) {
|
||||
ViewTransition next2 = it3.next();
|
||||
if (next2.supports(action)) {
|
||||
Iterator<View> it4 = this.mRelatedViews.iterator();
|
||||
while (it4.hasNext()) {
|
||||
View next3 = it4.next();
|
||||
if (next2.matchesView(next3)) {
|
||||
next3.getHitRect(rect);
|
||||
if (rect.contains((int) x, (int) y)) {
|
||||
viewTransition = next2;
|
||||
next2.applyTransition(this, this.mMotionLayout, currentState, constraintSet, next3);
|
||||
} else {
|
||||
viewTransition = next2;
|
||||
}
|
||||
next2 = viewTransition;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void addAnimation(ViewTransition.Animate animation) {
|
||||
if (this.animations == null) {
|
||||
this.animations = new ArrayList<>();
|
||||
}
|
||||
this.animations.add(animation);
|
||||
}
|
||||
|
||||
void removeAnimation(ViewTransition.Animate animation) {
|
||||
this.removeList.add(animation);
|
||||
}
|
||||
|
||||
void animate() {
|
||||
ArrayList<ViewTransition.Animate> arrayList = this.animations;
|
||||
if (arrayList == null) {
|
||||
return;
|
||||
}
|
||||
Iterator<ViewTransition.Animate> it = arrayList.iterator();
|
||||
while (it.hasNext()) {
|
||||
it.next().mutate();
|
||||
}
|
||||
this.animations.removeAll(this.removeList);
|
||||
this.removeList.clear();
|
||||
if (this.animations.isEmpty()) {
|
||||
this.animations = null;
|
||||
}
|
||||
}
|
||||
|
||||
void invalidate() {
|
||||
this.mMotionLayout.invalidate();
|
||||
}
|
||||
|
||||
boolean applyViewTransition(int viewTransitionId, MotionController motionController) {
|
||||
Iterator<ViewTransition> it = this.viewTransitions.iterator();
|
||||
while (it.hasNext()) {
|
||||
ViewTransition next = it.next();
|
||||
if (next.getId() == viewTransitionId) {
|
||||
next.mKeyFrames.addAllFrames(motionController);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void listenForSharedVariable(final ViewTransition viewTransition, final boolean isSet) {
|
||||
final int sharedValueID = viewTransition.getSharedValueID();
|
||||
final int sharedValue = viewTransition.getSharedValue();
|
||||
ConstraintLayout.getSharedValues().addListener(viewTransition.getSharedValueID(), new SharedValues.SharedValuesListener() { // from class: androidx.constraintlayout.motion.widget.ViewTransitionController.1
|
||||
@Override // androidx.constraintlayout.widget.SharedValues.SharedValuesListener
|
||||
public void onNewValue(int id, int value, int oldValue) {
|
||||
int sharedValueCurrent = viewTransition.getSharedValueCurrent();
|
||||
viewTransition.setSharedValueCurrent(value);
|
||||
if (sharedValueID != id || sharedValueCurrent == value) {
|
||||
return;
|
||||
}
|
||||
if (isSet) {
|
||||
if (sharedValue == value) {
|
||||
int childCount = ViewTransitionController.this.mMotionLayout.getChildCount();
|
||||
for (int i = 0; i < childCount; i++) {
|
||||
View childAt = ViewTransitionController.this.mMotionLayout.getChildAt(i);
|
||||
if (viewTransition.matchesView(childAt)) {
|
||||
int currentState = ViewTransitionController.this.mMotionLayout.getCurrentState();
|
||||
ConstraintSet constraintSet = ViewTransitionController.this.mMotionLayout.getConstraintSet(currentState);
|
||||
ViewTransition viewTransition2 = viewTransition;
|
||||
ViewTransitionController viewTransitionController = ViewTransitionController.this;
|
||||
viewTransition2.applyTransition(viewTransitionController, viewTransitionController.mMotionLayout, currentState, constraintSet, childAt);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (sharedValue != value) {
|
||||
int childCount2 = ViewTransitionController.this.mMotionLayout.getChildCount();
|
||||
for (int i2 = 0; i2 < childCount2; i2++) {
|
||||
View childAt2 = ViewTransitionController.this.mMotionLayout.getChildAt(i2);
|
||||
if (viewTransition.matchesView(childAt2)) {
|
||||
int currentState2 = ViewTransitionController.this.mMotionLayout.getCurrentState();
|
||||
ConstraintSet constraintSet2 = ViewTransitionController.this.mMotionLayout.getConstraintSet(currentState2);
|
||||
ViewTransition viewTransition3 = viewTransition;
|
||||
ViewTransitionController viewTransitionController2 = ViewTransitionController.this;
|
||||
viewTransition3.applyTransition(viewTransitionController2, viewTransitionController2.mMotionLayout, currentState2, constraintSet2, childAt2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user