view: Drop unused custom views
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -1,94 +0,0 @@
|
||||
/*
|
||||
* Aurora Store
|
||||
* Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
|
||||
*
|
||||
* Aurora Store is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Aurora Store is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with Aurora Store. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package com.aurora.store.view.custom;
|
||||
|
||||
import android.graphics.PointF;
|
||||
import android.view.animation.Interpolator;
|
||||
|
||||
public class CubicBezierInterpolator implements Interpolator {
|
||||
|
||||
public static final CubicBezierInterpolator DEFAULT = new CubicBezierInterpolator(0.25, 0.1, 0.25, 1);
|
||||
public static final CubicBezierInterpolator EASE_OUT = new CubicBezierInterpolator(0, 0, .58, 1);
|
||||
public static final CubicBezierInterpolator EASE_OUT_QUINT = new CubicBezierInterpolator(.23, 1, .32, 1);
|
||||
public static final CubicBezierInterpolator EASE_IN = new CubicBezierInterpolator(.42, 0, 1, 1);
|
||||
public static final CubicBezierInterpolator EASE_BOTH = new CubicBezierInterpolator(.42, 0, .58, 1);
|
||||
public static final CubicBezierInterpolator EASE_IN_OUT_QUAD = new CubicBezierInterpolator(0.455, 0.03, 0.515, 0.955);
|
||||
|
||||
protected PointF start;
|
||||
protected PointF end;
|
||||
protected PointF a = new PointF();
|
||||
protected PointF b = new PointF();
|
||||
protected PointF c = new PointF();
|
||||
|
||||
public CubicBezierInterpolator(PointF start, PointF end) throws IllegalArgumentException {
|
||||
if (start.x < 0 || start.x > 1) {
|
||||
throw new IllegalArgumentException("startX value must be in the range [0, 1]");
|
||||
}
|
||||
if (end.x < 0 || end.x > 1) {
|
||||
throw new IllegalArgumentException("endX value must be in the range [0, 1]");
|
||||
}
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
public CubicBezierInterpolator(float startX, float startY, float endX, float endY) {
|
||||
this(new PointF(startX, startY), new PointF(endX, endY));
|
||||
}
|
||||
|
||||
public CubicBezierInterpolator(double startX, double startY, double endX, double endY) {
|
||||
this((float) startX, (float) startY, (float) endX, (float) endY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getInterpolation(float time) {
|
||||
return getBezierCoordinateY(getXForTime(time));
|
||||
}
|
||||
|
||||
protected float getBezierCoordinateY(float time) {
|
||||
c.y = 3 * start.y;
|
||||
b.y = 3 * (end.y - start.y) - c.y;
|
||||
a.y = 1 - c.y - b.y;
|
||||
return time * (c.y + time * (b.y + time * a.y));
|
||||
}
|
||||
|
||||
protected float getXForTime(float time) {
|
||||
float x = time;
|
||||
float z;
|
||||
for (int i = 1; i < 14; i++) {
|
||||
z = getBezierCoordinateX(x) - time;
|
||||
if (Math.abs(z) < 1e-3) {
|
||||
break;
|
||||
}
|
||||
x -= z / getXDerivate(x);
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
private float getXDerivate(float t) {
|
||||
return c.x + t * (2 * b.x + 3 * a.x * t);
|
||||
}
|
||||
|
||||
private float getBezierCoordinateX(float time) {
|
||||
c.x = 3 * start.x;
|
||||
b.x = 3 * (end.x - start.x) - c.x;
|
||||
a.x = 1 - c.x - b.x;
|
||||
return time * (c.x + time * (b.x + time * a.x));
|
||||
}
|
||||
}
|
||||
@@ -1,386 +0,0 @@
|
||||
package com.aurora.store.view.custom.progress;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.drawable.Animatable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.text.TextUtils;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.Log;
|
||||
import android.view.View;
|
||||
import android.view.animation.AnimationUtils;
|
||||
|
||||
import com.aurora.store.R;
|
||||
import com.aurora.store.view.custom.progress.indicators.BallPulseIndicator;
|
||||
import com.aurora.store.view.custom.progress.indicators.Indicator;
|
||||
|
||||
|
||||
public class AuroraProgressView extends View {
|
||||
|
||||
private static final String TAG = "AuroraProgressView";
|
||||
|
||||
private static final BallPulseIndicator DEFAULT_INDICATOR = new BallPulseIndicator();
|
||||
|
||||
private static final int MIN_SHOW_TIME = 500; // ms
|
||||
private static final int MIN_DELAY = 500; // ms
|
||||
|
||||
private long startTime = -1;
|
||||
|
||||
private boolean postedHide = false;
|
||||
private boolean postedShow = false;
|
||||
private boolean dismissed = false;
|
||||
|
||||
private final Runnable mDelayedHide = new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
postedHide = false;
|
||||
startTime = -1;
|
||||
setVisibility(View.GONE);
|
||||
}
|
||||
};
|
||||
|
||||
private final Runnable mDelayedShow = new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
postedShow = false;
|
||||
if (!dismissed) {
|
||||
startTime = System.currentTimeMillis();
|
||||
setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
int minWidth;
|
||||
int maxWidth;
|
||||
int minHeight;
|
||||
int maxHeight;
|
||||
|
||||
private Indicator indicator;
|
||||
private int indicatorColor;
|
||||
|
||||
private boolean mShouldStartAnimationDrawable;
|
||||
|
||||
public AuroraProgressView(Context context) {
|
||||
super(context);
|
||||
init(context, null, 0, 0);
|
||||
}
|
||||
|
||||
public AuroraProgressView(Context context, AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
init(context, attrs, 0, R.style.AuroraProgressView);
|
||||
}
|
||||
|
||||
public AuroraProgressView(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
init(context, attrs, defStyleAttr, R.style.AuroraProgressView);
|
||||
}
|
||||
|
||||
public AuroraProgressView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
super(context, attrs, defStyleAttr, defStyleRes);
|
||||
init(context, attrs, defStyleAttr, R.style.AuroraProgressView);
|
||||
}
|
||||
|
||||
private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
|
||||
minWidth = 24;
|
||||
maxWidth = 48;
|
||||
minHeight = 24;
|
||||
maxHeight = 48;
|
||||
|
||||
final TypedArray a = context.obtainStyledAttributes(
|
||||
attrs, R.styleable.AuroraProgressView, defStyleAttr, defStyleRes);
|
||||
|
||||
minWidth = a.getDimensionPixelSize(R.styleable.AuroraProgressView_minWidth, minWidth);
|
||||
maxWidth = a.getDimensionPixelSize(R.styleable.AuroraProgressView_maxWidth, maxWidth);
|
||||
minHeight = a.getDimensionPixelSize(R.styleable.AuroraProgressView_minHeight, minHeight);
|
||||
maxHeight = a.getDimensionPixelSize(R.styleable.AuroraProgressView_maxHeight, maxHeight);
|
||||
String indicatorName = a.getString(R.styleable.AuroraProgressView_indicatorName);
|
||||
indicatorColor = a.getColor(R.styleable.AuroraProgressView_indicatorColor, Color.WHITE);
|
||||
setIndicator(indicatorName);
|
||||
|
||||
if (indicator == null) {
|
||||
setIndicator(DEFAULT_INDICATOR);
|
||||
}
|
||||
|
||||
a.recycle();
|
||||
}
|
||||
|
||||
public Indicator getIndicator() {
|
||||
return indicator;
|
||||
}
|
||||
|
||||
public void setIndicator(Indicator d) {
|
||||
if (indicator != d) {
|
||||
if (indicator != null) {
|
||||
indicator.setCallback(null);
|
||||
unscheduleDrawable(indicator);
|
||||
}
|
||||
|
||||
indicator = d;
|
||||
//need to set indicator color again if you didn't specified when you update the indicator .
|
||||
setIndicatorColor(indicatorColor);
|
||||
if (d != null) {
|
||||
d.setCallback(this);
|
||||
}
|
||||
postInvalidate();
|
||||
}
|
||||
}
|
||||
|
||||
public void setIndicatorColor(int color) {
|
||||
this.indicatorColor = color;
|
||||
indicator.setColor(color);
|
||||
}
|
||||
|
||||
public void setIndicator(String indicatorName) {
|
||||
if (TextUtils.isEmpty(indicatorName)) {
|
||||
return;
|
||||
}
|
||||
StringBuilder drawableClassName = new StringBuilder();
|
||||
if (!indicatorName.contains(".")) {
|
||||
String defaultPackageName = getClass().getPackage().getName();
|
||||
drawableClassName.append(defaultPackageName)
|
||||
.append(".indicators")
|
||||
.append(".");
|
||||
}
|
||||
drawableClassName.append(indicatorName);
|
||||
try {
|
||||
Class<?> drawableClass = Class.forName(drawableClassName.toString());
|
||||
Indicator indicator = (Indicator) drawableClass.getDeclaredConstructor().newInstance();
|
||||
setIndicator(indicator);
|
||||
} catch (Exception exception) {
|
||||
Log.e(TAG, "Failed to set indicator!", exception);
|
||||
}
|
||||
}
|
||||
|
||||
public void smoothToShow() {
|
||||
startAnimation(AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_in));
|
||||
setVisibility(VISIBLE);
|
||||
}
|
||||
|
||||
public void smoothToHide() {
|
||||
startAnimation(AnimationUtils.loadAnimation(getContext(), android.R.anim.fade_out));
|
||||
setVisibility(GONE);
|
||||
}
|
||||
|
||||
public void hide() {
|
||||
dismissed = true;
|
||||
removeCallbacks(mDelayedShow);
|
||||
long diff = System.currentTimeMillis() - startTime;
|
||||
if (diff >= MIN_SHOW_TIME || startTime == -1) {
|
||||
// The progress spinner has been shown long enough
|
||||
// OR was not shown yet. If it wasn't shown yet,
|
||||
// it will just never be shown.
|
||||
setVisibility(View.GONE);
|
||||
} else {
|
||||
// The progress spinner is shown, but not long enough,
|
||||
// so put a delayed message in to hide it when its been
|
||||
// shown long enough.
|
||||
if (!postedHide) {
|
||||
postDelayed(mDelayedHide, MIN_SHOW_TIME - diff);
|
||||
postedHide = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void show() {
|
||||
// Reset the start time.
|
||||
startTime = -1;
|
||||
dismissed = false;
|
||||
removeCallbacks(mDelayedHide);
|
||||
if (!postedShow) {
|
||||
postDelayed(mDelayedShow, MIN_DELAY);
|
||||
postedShow = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean verifyDrawable(Drawable who) {
|
||||
return who == indicator
|
||||
|| super.verifyDrawable(who);
|
||||
}
|
||||
|
||||
void startAnimation() {
|
||||
if (getVisibility() != VISIBLE) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (indicator != null) {
|
||||
mShouldStartAnimationDrawable = true;
|
||||
}
|
||||
postInvalidate();
|
||||
}
|
||||
|
||||
void stopAnimation() {
|
||||
if (indicator != null) {
|
||||
indicator.stop();
|
||||
mShouldStartAnimationDrawable = false;
|
||||
}
|
||||
postInvalidate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVisibility(int v) {
|
||||
if (getVisibility() != v) {
|
||||
super.setVisibility(v);
|
||||
if (v == GONE || v == INVISIBLE) {
|
||||
stopAnimation();
|
||||
} else {
|
||||
startAnimation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onVisibilityChanged(View changedView, int visibility) {
|
||||
super.onVisibilityChanged(changedView, visibility);
|
||||
if (visibility == GONE || visibility == INVISIBLE) {
|
||||
stopAnimation();
|
||||
} else {
|
||||
startAnimation();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void invalidateDrawable(Drawable dr) {
|
||||
if (verifyDrawable(dr)) {
|
||||
invalidate();
|
||||
} else {
|
||||
super.invalidateDrawable(dr);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
|
||||
updateDrawableBounds(w, h);
|
||||
}
|
||||
|
||||
private void updateDrawableBounds(int w, int h) {
|
||||
// onDraw will translate the canvas so we draw starting at 0,0.
|
||||
// Subtract out padding for the purposes of the calculations below.
|
||||
w -= getPaddingRight() + getPaddingLeft();
|
||||
h -= getPaddingTop() + getPaddingBottom();
|
||||
|
||||
int right = w;
|
||||
int bottom = h;
|
||||
int top = 0;
|
||||
int left = 0;
|
||||
|
||||
if (indicator != null) {
|
||||
// Maintain aspect ratio. Certain kinds of animated drawables
|
||||
// get very confused otherwise.
|
||||
final int intrinsicWidth = indicator.getIntrinsicWidth();
|
||||
final int intrinsicHeight = indicator.getIntrinsicHeight();
|
||||
final float intrinsicAspect = (float) intrinsicWidth / intrinsicHeight;
|
||||
final float boundAspect = (float) w / h;
|
||||
if (intrinsicAspect != boundAspect) {
|
||||
if (boundAspect > intrinsicAspect) {
|
||||
// New width is larger. Make it smaller to match height.
|
||||
final int width = (int) (h * intrinsicAspect);
|
||||
left = (w - width) / 2;
|
||||
right = left + width;
|
||||
} else {
|
||||
// New height is larger. Make it smaller to match width.
|
||||
final int height = (int) (w * (1 / intrinsicAspect));
|
||||
top = (h - height) / 2;
|
||||
bottom = top + height;
|
||||
}
|
||||
}
|
||||
indicator.setBounds(left, top, right, bottom);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected synchronized void onDraw(Canvas canvas) {
|
||||
super.onDraw(canvas);
|
||||
drawTrack(canvas);
|
||||
}
|
||||
|
||||
void drawTrack(Canvas canvas) {
|
||||
final Drawable d = indicator;
|
||||
if (d != null) {
|
||||
// Translate canvas so a indeterminate circular progress bar with padding
|
||||
// rotates properly in its animation
|
||||
final int saveCount = canvas.save();
|
||||
|
||||
canvas.translate(getPaddingLeft(), getPaddingTop());
|
||||
|
||||
d.draw(canvas);
|
||||
canvas.restoreToCount(saveCount);
|
||||
|
||||
if (mShouldStartAnimationDrawable && d instanceof Animatable) {
|
||||
((Animatable) d).start();
|
||||
mShouldStartAnimationDrawable = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
||||
int dw = 0;
|
||||
int dh = 0;
|
||||
|
||||
final Drawable d = indicator;
|
||||
if (d != null) {
|
||||
dw = Math.max(minWidth, Math.min(maxWidth, d.getIntrinsicWidth()));
|
||||
dh = Math.max(minHeight, Math.min(maxHeight, d.getIntrinsicHeight()));
|
||||
}
|
||||
|
||||
updateDrawableState();
|
||||
|
||||
dw += getPaddingLeft() + getPaddingRight();
|
||||
dh += getPaddingTop() + getPaddingBottom();
|
||||
|
||||
final int measuredWidth = resolveSizeAndState(dw, widthMeasureSpec, 0);
|
||||
final int measuredHeight = resolveSizeAndState(dh, heightMeasureSpec, 0);
|
||||
setMeasuredDimension(measuredWidth, measuredHeight);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawableStateChanged() {
|
||||
super.drawableStateChanged();
|
||||
updateDrawableState();
|
||||
}
|
||||
|
||||
private void updateDrawableState() {
|
||||
final int[] state = getDrawableState();
|
||||
if (indicator != null && indicator.isStateful()) {
|
||||
indicator.setState(state);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawableHotspotChanged(float x, float y) {
|
||||
super.drawableHotspotChanged(x, y);
|
||||
|
||||
if (indicator != null) {
|
||||
indicator.setHotspot(x, y);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
startAnimation();
|
||||
removeCallbacks();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
stopAnimation();
|
||||
// This should come after stopAnimation(), otherwise an invalidate message remains in the
|
||||
// queue, which can prevent the entire view hierarchy from being GC'ed during a rotation
|
||||
super.onDetachedFromWindow();
|
||||
removeCallbacks();
|
||||
}
|
||||
|
||||
private void removeCallbacks() {
|
||||
removeCallbacks(mDelayedHide);
|
||||
removeCallbacks(mDelayedShow);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
package com.aurora.store.view.custom.progress.indicators
|
||||
|
||||
import android.animation.ValueAnimator
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Paint
|
||||
|
||||
class BallPulseIndicator : Indicator() {
|
||||
|
||||
private val scaleFloats = floatArrayOf(
|
||||
0.75f,
|
||||
1.0f,
|
||||
0.75f
|
||||
)
|
||||
|
||||
override fun draw(canvas: Canvas, paint: Paint) {
|
||||
val circleSpacing = 4f
|
||||
val radius = (width.coerceAtMost(height) - circleSpacing * 2) / 6
|
||||
val x = width / 2f - (radius * 2 + circleSpacing)
|
||||
val y = height / 2f
|
||||
|
||||
for (i in 0..2) {
|
||||
canvas.save()
|
||||
val translateX = x + radius * 2 * i + circleSpacing * i
|
||||
canvas.translate(translateX, y)
|
||||
canvas.scale(scaleFloats[i], scaleFloats[i])
|
||||
canvas.drawCircle(0f, 0f, radius, paint)
|
||||
canvas.restore()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreateAnimators(): ArrayList<ValueAnimator> {
|
||||
val animators = ArrayList<ValueAnimator>()
|
||||
val delays = intArrayOf(120, 240, 360)
|
||||
|
||||
for (i in 0..2) {
|
||||
val scaleAnim = ValueAnimator.ofFloat(1f, 0.3f, 1f)
|
||||
scaleAnim.duration = 1000
|
||||
scaleAnim.repeatCount = -1
|
||||
scaleAnim.startDelay = delays[i].toLong()
|
||||
|
||||
addUpdateListener(scaleAnim) {
|
||||
scaleFloats[i] = it.animatedValue as Float
|
||||
postInvalidate()
|
||||
}
|
||||
|
||||
animators.add(scaleAnim)
|
||||
}
|
||||
return animators
|
||||
}
|
||||
}
|
||||
@@ -1,192 +0,0 @@
|
||||
package com.aurora.store.view.custom.progress.indicators;
|
||||
|
||||
import android.animation.ValueAnimator;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.ColorFilter;
|
||||
import android.graphics.Paint;
|
||||
import android.graphics.PixelFormat;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.drawable.Animatable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
||||
public abstract class Indicator extends Drawable implements Animatable {
|
||||
|
||||
private static final Rect ZERO_BOUNDS_RECT = new Rect();
|
||||
|
||||
private final HashMap<ValueAnimator, ValueAnimator.AnimatorUpdateListener> updateListenerHashMap = new HashMap<>();
|
||||
private final Paint paint = new Paint();
|
||||
|
||||
private int alpha = 255;
|
||||
private ArrayList<ValueAnimator> animators;
|
||||
private boolean hasAnimators;
|
||||
|
||||
protected Rect drawBounds = ZERO_BOUNDS_RECT;
|
||||
|
||||
public Indicator() {
|
||||
paint.setColor(Color.WHITE);
|
||||
paint.setStyle(Paint.Style.FILL);
|
||||
paint.setAntiAlias(true);
|
||||
}
|
||||
|
||||
public int getColor() {
|
||||
return paint.getColor();
|
||||
}
|
||||
|
||||
public void setColor(int color) {
|
||||
paint.setColor(color);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAlpha(int alpha) {
|
||||
this.alpha = alpha;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAlpha() {
|
||||
return alpha;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SuppressWarnings({"RedundantSuppression", "deprecation"})
|
||||
public int getOpacity() {
|
||||
return PixelFormat.OPAQUE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setColorFilter(ColorFilter colorFilter) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(Canvas canvas) {
|
||||
draw(canvas, paint);
|
||||
}
|
||||
|
||||
public abstract void draw(Canvas canvas, Paint paint);
|
||||
|
||||
public abstract ArrayList<ValueAnimator> onCreateAnimators();
|
||||
|
||||
@Override
|
||||
public void start() {
|
||||
ensureAnimators();
|
||||
|
||||
if (animators == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If the animators has not ended, do nothing.
|
||||
if (isStarted()) {
|
||||
return;
|
||||
}
|
||||
startAnimators();
|
||||
invalidateSelf();
|
||||
}
|
||||
|
||||
private void startAnimators() {
|
||||
for (int i = 0; i < animators.size(); i++) {
|
||||
ValueAnimator animator = animators.get(i);
|
||||
|
||||
//when the animator restart , add the updateListener again because they
|
||||
// was removed by animator stop .
|
||||
ValueAnimator.AnimatorUpdateListener updateListener = updateListenerHashMap.get(animator);
|
||||
if (updateListener != null) {
|
||||
animator.addUpdateListener(updateListener);
|
||||
}
|
||||
|
||||
animator.start();
|
||||
}
|
||||
}
|
||||
|
||||
private void stopAnimators() {
|
||||
if (animators != null) {
|
||||
for (ValueAnimator animator : animators) {
|
||||
if (animator != null && animator.isStarted()) {
|
||||
animator.removeAllUpdateListeners();
|
||||
animator.end();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ensureAnimators() {
|
||||
if (!hasAnimators) {
|
||||
animators = onCreateAnimators();
|
||||
hasAnimators = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
stopAnimators();
|
||||
}
|
||||
|
||||
private boolean isStarted() {
|
||||
for (ValueAnimator animator : animators) {
|
||||
return animator.isStarted();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRunning() {
|
||||
for (ValueAnimator animator : animators) {
|
||||
return animator.isRunning();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void addUpdateListener(ValueAnimator animator, ValueAnimator.AnimatorUpdateListener updateListener) {
|
||||
updateListenerHashMap.put(animator, updateListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onBoundsChange(Rect bounds) {
|
||||
super.onBoundsChange(bounds);
|
||||
setDrawBounds(bounds);
|
||||
}
|
||||
|
||||
public void setDrawBounds(Rect drawBounds) {
|
||||
setDrawBounds(drawBounds.left, drawBounds.top, drawBounds.right, drawBounds.bottom);
|
||||
}
|
||||
|
||||
public void setDrawBounds(int left, int top, int right, int bottom) {
|
||||
this.drawBounds = new Rect(left, top, right, bottom);
|
||||
}
|
||||
|
||||
public void postInvalidate() {
|
||||
invalidateSelf();
|
||||
}
|
||||
|
||||
public Rect getDrawBounds() {
|
||||
return drawBounds;
|
||||
}
|
||||
|
||||
public int getWidth() {
|
||||
return drawBounds.width();
|
||||
}
|
||||
|
||||
public int getHeight() {
|
||||
return drawBounds.height();
|
||||
}
|
||||
|
||||
public int centerX() {
|
||||
return drawBounds.centerX();
|
||||
}
|
||||
|
||||
public int centerY() {
|
||||
return drawBounds.centerY();
|
||||
}
|
||||
|
||||
public float exactCenterX() {
|
||||
return drawBounds.exactCenterX();
|
||||
}
|
||||
|
||||
public float exactCenterY() {
|
||||
return drawBounds.exactCenterY();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -49,18 +49,6 @@
|
||||
tools:text="Install" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<com.aurora.store.view.custom.progress.AuroraProgressView
|
||||
android:id="@+id/progress"
|
||||
android:layout_width="@dimen/icon_size_small"
|
||||
android:layout_height="@dimen/icon_size_small"
|
||||
android:layout_centerInParent="true"
|
||||
tools:indicatorColor="@color/colorAccent" />
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
Reference in New Issue
Block a user