Remove RenderNodeAnimator
This commit is contained in:
1 parent
e86500d189
commit
2fae84958f
3 files changed
+6
-133
No files matched your search
@@ -18,11 +18,9 @@ package com.hippo.effect;
|
||||
|
||||
import android.animation.Animator;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.view.RenderNodeAnimator;
|
||||
import android.view.View;
|
||||
|
||||
import com.hippo.animation.SimpleAnimatorListener;
|
||||
import com.hippo.util.AnimationUtils;
|
||||
import com.hippo.util.ViewUtils;
|
||||
|
||||
public class ViewTransition {
|
||||
@@ -86,13 +84,7 @@ public class ViewTransition {
|
||||
ViewUtils.setVisibility(v, View.GONE);
|
||||
}
|
||||
}
|
||||
View viewToHide = views[oldShownView];
|
||||
View viewToShow = views[shownView];
|
||||
if (AnimationUtils.isSupportRenderNodeAnimator(viewToHide, viewToShow)) {
|
||||
startAnimationsL(viewToHide, viewToShow);
|
||||
} else {
|
||||
startAnimations(views[oldShownView], views[shownView]);
|
||||
}
|
||||
startAnimations(views[oldShownView], views[shownView]);
|
||||
} else {
|
||||
for (int i = 0; i < length; i++) {
|
||||
View v = views[i];
|
||||
@@ -112,52 +104,6 @@ public class ViewTransition {
|
||||
}
|
||||
}
|
||||
|
||||
private void startAnimationsL(final View hiddenView, View shownView) {
|
||||
RenderNodeAnimator rna1 = new RenderNodeAnimator(RenderNodeAnimator.ALPHA, 0f);
|
||||
rna1.setTarget(hiddenView);
|
||||
rna1.setDuration(ANIMATE_TIME);
|
||||
rna1.addListener(new SimpleAnimatorListener() {
|
||||
@Override
|
||||
public void onAnimationCancel(Animator animation) {
|
||||
super.onAnimationCancel(animation);
|
||||
mAnimator1 = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation, boolean canceled) {
|
||||
super.onAnimationEnd(animation, canceled);
|
||||
if (!canceled) {
|
||||
ViewUtils.setVisibility(hiddenView, View.GONE);
|
||||
mAnimator1 = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
rna1.start();
|
||||
mAnimator1 = rna1;
|
||||
|
||||
ViewUtils.setVisibility(shownView, View.VISIBLE);
|
||||
RenderNodeAnimator rna2 = new RenderNodeAnimator(RenderNodeAnimator.ALPHA, 1f);
|
||||
rna2.setTarget(shownView);
|
||||
rna2.setDuration(ANIMATE_TIME);
|
||||
rna2.addListener(new SimpleAnimatorListener() {
|
||||
@Override
|
||||
public void onAnimationCancel(Animator animation) {
|
||||
super.onAnimationCancel(animation);
|
||||
mAnimator2 = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(Animator animation, boolean canceled) {
|
||||
super.onAnimationEnd(animation, canceled);
|
||||
if (!canceled) {
|
||||
mAnimator2 = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
rna2.start();
|
||||
mAnimator2 = rna2;
|
||||
}
|
||||
|
||||
private void startAnimations(final View hiddenView, final View shownView) {
|
||||
ObjectAnimator oa1 = ObjectAnimator.ofFloat(hiddenView, "alpha", 0f);
|
||||
oa1.setDuration(ANIMATE_TIME);
|
||||
|
||||
@@ -16,13 +16,9 @@
|
||||
|
||||
package com.hippo.util;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.graphics.Canvas;
|
||||
import android.os.Build;
|
||||
import android.support.v4.view.animation.FastOutLinearInInterpolator;
|
||||
import android.support.v4.view.animation.FastOutSlowInInterpolator;
|
||||
import android.support.v4.view.animation.LinearOutSlowInInterpolator;
|
||||
import android.view.View;
|
||||
import android.view.animation.Interpolator;
|
||||
|
||||
public final class AnimationUtils {
|
||||
@@ -30,22 +26,4 @@ public final class AnimationUtils {
|
||||
public static final Interpolator FAST_SLOW_INTERPOLATOR = new LinearOutSlowInInterpolator();
|
||||
public static final Interpolator SLOW_FAST_INTERPOLATOR = new FastOutLinearInInterpolator();
|
||||
public static final Interpolator SLOW_FAST_SLOW_INTERPOLATOR = new FastOutSlowInInterpolator();
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.KITKAT)
|
||||
public static boolean isSupportRenderNodeAnimator(View... views) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||
return false;
|
||||
}
|
||||
for (View v : views) {
|
||||
if (!v.isAttachedToWindow()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static boolean isSupportRenderNodeAnimator(Canvas canvas) {
|
||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP &&
|
||||
canvas.isHardwareAccelerated();
|
||||
}
|
||||
}
|
||||
@@ -20,15 +20,12 @@ import android.animation.Animator;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.content.Context;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.CanvasProperty;
|
||||
import android.graphics.Paint;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Parcelable;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.HardwareCanvas;
|
||||
import android.view.RenderNodeAnimator;
|
||||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.animation.Interpolator;
|
||||
@@ -51,11 +48,6 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota
|
||||
private boolean mChecked = false;
|
||||
private boolean mPrepareAnimator = false;
|
||||
|
||||
private CanvasProperty<Paint> mPropPaint;
|
||||
private CanvasProperty<Float> mPropRadius;
|
||||
private CanvasProperty<Float> mPropX;
|
||||
private CanvasProperty<Float> mPropY;
|
||||
|
||||
private Paint mPaint;
|
||||
private float mRadius = 0f;
|
||||
private float mX;
|
||||
@@ -100,6 +92,8 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota
|
||||
|
||||
@Override
|
||||
public void drawableHotspotChanged(float x, float y) {
|
||||
super.drawableHotspotChanged(x, y);
|
||||
|
||||
mX = x;
|
||||
mY = y;
|
||||
mMaxRadius = MathUtils.coverageRadius(getWidth(), getHeight(), x, y);
|
||||
@@ -135,34 +129,7 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota
|
||||
mPrepareAnimator = true;
|
||||
}
|
||||
|
||||
private void createHardwareAnimations(Canvas canvas) {
|
||||
float startRadius;
|
||||
float endRadius;
|
||||
Interpolator interpolator;
|
||||
if (mChecked) {
|
||||
startRadius = 0;
|
||||
endRadius = mMaxRadius;
|
||||
interpolator = AnimationUtils.FAST_SLOW_INTERPOLATOR;
|
||||
} else {
|
||||
startRadius = mMaxRadius;
|
||||
endRadius = 0;
|
||||
interpolator = AnimationUtils.SLOW_FAST_INTERPOLATOR;
|
||||
}
|
||||
mPropPaint = CanvasProperty.createPaint(mPaint);
|
||||
mPropRadius = CanvasProperty.createFloat(startRadius);
|
||||
mPropX = CanvasProperty.createFloat(mX);
|
||||
mPropY = CanvasProperty.createFloat(mY);
|
||||
|
||||
final RenderNodeAnimator radiusAnim = new RenderNodeAnimator(mPropRadius, endRadius);
|
||||
radiusAnim.setDuration(ANIMATION_DURATION);
|
||||
radiusAnim.setInterpolator(interpolator);
|
||||
radiusAnim.addListener(mAnimatorListener);
|
||||
radiusAnim.setTarget(canvas);
|
||||
radiusAnim.start();
|
||||
mAnimator = radiusAnim;
|
||||
}
|
||||
|
||||
private void createSoftwareAnimations() {
|
||||
private void createAnimations() {
|
||||
float startRadius;
|
||||
float endRadius;
|
||||
Interpolator interpolator;
|
||||
@@ -200,24 +167,14 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota
|
||||
protected void onDraw(@NonNull Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
|
||||
boolean useHardware = AnimationUtils.isSupportRenderNodeAnimator(canvas);
|
||||
|
||||
if (mPrepareAnimator) {
|
||||
mPrepareAnimator = false;
|
||||
cancelAnimations();
|
||||
if (useHardware) {
|
||||
createHardwareAnimations(canvas);
|
||||
} else {
|
||||
createSoftwareAnimations();
|
||||
}
|
||||
createAnimations();
|
||||
}
|
||||
|
||||
if (mAnimator != null) {
|
||||
if (useHardware) {
|
||||
drawHardware((HardwareCanvas) canvas);
|
||||
} else {
|
||||
drawSoftware(canvas);
|
||||
}
|
||||
canvas.drawCircle(mX, mY, mRadius, mPaint);
|
||||
} else {
|
||||
if (mChecked) {
|
||||
canvas.drawColor(mMaskColor);
|
||||
@@ -225,14 +182,6 @@ public class CheckTextView extends TextView implements OnClickListener, Hotspota
|
||||
}
|
||||
}
|
||||
|
||||
private void drawHardware(HardwareCanvas c) {
|
||||
c.drawCircle(mPropX, mPropY, mPropRadius, mPropPaint);
|
||||
}
|
||||
|
||||
private void drawSoftware(Canvas c) {
|
||||
c.drawCircle(mX, mY, mRadius, mPaint);
|
||||
}
|
||||
|
||||
public void setChecked(boolean checked) {
|
||||
setChecked(checked, true);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user