Remove RenderNodeAnimator

This commit is contained in:
seven332 committed 2015-06-08 23:43:34 +08:00
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);
}