551 lines
20 KiB
Java
551 lines
20 KiB
Java
package com.ubt.jimu.controller.component;
|
||
|
||
import android.animation.Animator;
|
||
import android.animation.ValueAnimator;
|
||
import android.content.Context;
|
||
import android.graphics.Bitmap;
|
||
import android.graphics.BitmapFactory;
|
||
import android.graphics.Canvas;
|
||
import android.graphics.Paint;
|
||
import android.graphics.PointF;
|
||
import android.graphics.Rect;
|
||
import android.graphics.RectF;
|
||
import android.view.MotionEvent;
|
||
import android.view.View;
|
||
import android.view.animation.BounceInterpolator;
|
||
import android.view.animation.LinearInterpolator;
|
||
import androidx.core.content.ContextCompat;
|
||
import com.ubt.jimu.R;
|
||
import com.ubt.jimu.controller.data.config.AccumulatorConfig;
|
||
import com.ubt.jimu.controller.data.widget.AccumulatorData;
|
||
import com.ubt.jimu.controller.view.control.ControlTouchEvent;
|
||
import com.ubt.jimu.controller.view.control.SuperControlView;
|
||
import com.ubt.jimu.utils.BitmapUtils;
|
||
import com.ubt.jimu.utils.LogUtils;
|
||
import com.ubt.jimu.utils.SystemUtils;
|
||
|
||
/* loaded from: classes.dex */
|
||
public class WallPulleyView extends SuperControlView<AccumulatorData> {
|
||
private Bitmap B;
|
||
private Bitmap C;
|
||
private Context D;
|
||
private Paint E;
|
||
private Paint F;
|
||
private Paint G;
|
||
private RectF H;
|
||
private RectF I;
|
||
private RectF J;
|
||
private RectF K;
|
||
private RectF L;
|
||
private RectF M;
|
||
private float N;
|
||
private float O;
|
||
private float P;
|
||
private float Q;
|
||
private float R;
|
||
private float S;
|
||
private float T;
|
||
private float U;
|
||
private float V;
|
||
private float W;
|
||
private float a0;
|
||
private float b0;
|
||
private float c0;
|
||
private float d0;
|
||
private float e0;
|
||
private float f0;
|
||
private float g0;
|
||
private float h0;
|
||
private WallPulleyViewCommandParameterListener i0;
|
||
|
||
public interface WallPulleyViewCommandParameterListener {
|
||
void a(float f, AccumulatorData accumulatorData);
|
||
|
||
void b(float f, AccumulatorData accumulatorData);
|
||
}
|
||
|
||
public WallPulleyView(Context context, float f, float f2) {
|
||
super(context);
|
||
this.R = 900.0f;
|
||
this.S = 400.0f;
|
||
this.e0 = 90.0f;
|
||
this.f0 = 0.0f;
|
||
this.g0 = 90.0f;
|
||
this.h0 = 0.0f;
|
||
this.D = context;
|
||
this.R = f;
|
||
this.S = f2;
|
||
h();
|
||
}
|
||
|
||
private void c(float f, float f2) {
|
||
float centerY = this.M.centerY() - (f2 - (this.Q / 2.0f));
|
||
if (centerY < 5.0f) {
|
||
centerY = 0.0f;
|
||
}
|
||
float f3 = this.T * centerY;
|
||
double d = (f3 * 180.0f) / ((this.P * 3.141592653589793d) / 2.0d);
|
||
if (d >= 90.0d) {
|
||
d = 90.0d;
|
||
}
|
||
this.e0 = (float) (90.0d - d);
|
||
this.f0 = ((float) d) * 2.0f;
|
||
float arcLength = getArcLength();
|
||
float f4 = this.T;
|
||
float f5 = arcLength / f4;
|
||
float f6 = (this.Q - f5) * f4;
|
||
float centerY2 = this.J.centerY();
|
||
float centerY3 = this.K.centerY();
|
||
if (f3 >= arcLength && f6 >= f3) {
|
||
float f7 = centerY2 - ((centerY - f5) * this.T);
|
||
RectF rectF = this.L;
|
||
float f8 = this.N;
|
||
rectF.set(f - (f8 / 2.0f), f7, f + (f8 / 2.0f), centerY2);
|
||
this.g0 = 90.0f;
|
||
this.h0 = 0.0f;
|
||
} else if (f6 < f3) {
|
||
double d2 = ((f3 - f6) * 180.0f) / ((this.P * 3.141592653589793d) / 2.0d);
|
||
this.g0 = (float) (360.0d - d2);
|
||
this.h0 = (float) ((d2 * 2.0d) + 180.0d);
|
||
RectF rectF2 = this.L;
|
||
float f9 = this.N;
|
||
rectF2.set(f - (f9 / 2.0f), centerY3, f + (f9 / 2.0f), centerY2);
|
||
} else {
|
||
RectF rectF3 = this.L;
|
||
float f10 = this.N;
|
||
rectF3.set(f - (f10 / 2.0f), 0.0f, f + (f10 / 2.0f), 0.0f);
|
||
}
|
||
this.W = centerY / this.Q;
|
||
}
|
||
|
||
/* JADX INFO: Access modifiers changed from: private */
|
||
public void d(float f, float f2) {
|
||
float f3 = this.T * f;
|
||
double d = (f3 * 180.0f) / ((this.P * 3.141592653589793d) / 2.0d);
|
||
if (d >= 90.0d) {
|
||
d = 90.0d;
|
||
}
|
||
this.e0 = (float) (90.0d - d);
|
||
this.f0 = ((float) d) * 2.0f;
|
||
float arcLength = getArcLength();
|
||
float f4 = this.T;
|
||
float f5 = arcLength / f4;
|
||
float f6 = (this.Q - f5) * f4;
|
||
float centerY = this.J.centerY();
|
||
float centerY2 = this.K.centerY();
|
||
if (f3 >= arcLength && f6 >= f3) {
|
||
float f7 = centerY - ((f - f5) * this.T);
|
||
RectF rectF = this.L;
|
||
float f8 = this.N;
|
||
rectF.set(f2 - (f8 / 2.0f), f7, f2 + (f8 / 2.0f), centerY);
|
||
this.g0 = 90.0f;
|
||
this.h0 = 0.0f;
|
||
} else if (f6 < f3) {
|
||
double d2 = ((f3 - f6) * 180.0f) / ((this.P * 3.141592653589793d) / 2.0d);
|
||
this.g0 = (float) (360.0d - d2);
|
||
this.h0 = (float) ((d2 * 2.0d) + 180.0d);
|
||
RectF rectF2 = this.L;
|
||
float f9 = this.N;
|
||
rectF2.set(f2 - (f9 / 2.0f), centerY2, f2 + (f9 / 2.0f), centerY);
|
||
} else {
|
||
RectF rectF3 = this.L;
|
||
float f10 = this.N;
|
||
rectF3.set(f2 - (f10 / 2.0f), 0.0f, f2 + (f10 / 2.0f), 0.0f);
|
||
}
|
||
this.W = f / this.Q;
|
||
}
|
||
|
||
private void g() {
|
||
this.B = BitmapUtils.a(ContextCompat.c(this.D, R.mipmap.wall_pulley));
|
||
this.C = BitmapFactory.decodeResource(this.D.getResources(), R.mipmap.wall_pulley_ball);
|
||
}
|
||
|
||
private float getArcLength() {
|
||
return ((float) (this.N * 3.141592653589793d)) / 4.0f;
|
||
}
|
||
|
||
private float getProgressLength() {
|
||
float arcLength = getArcLength() * 2.0f;
|
||
float f = this.Q + arcLength;
|
||
LogUtils.c("progressLength:" + f + " arcLength:" + arcLength);
|
||
return f;
|
||
}
|
||
|
||
private float getProgressRatio() {
|
||
return getProgressLength() / this.Q;
|
||
}
|
||
|
||
private void h() {
|
||
i();
|
||
g();
|
||
j();
|
||
k();
|
||
}
|
||
|
||
private void i() {
|
||
this.E = new Paint();
|
||
this.F = new Paint();
|
||
this.G = new Paint();
|
||
this.E.setFlags(3);
|
||
this.F.setFlags(3);
|
||
this.G.setFlags(3);
|
||
this.F.setColor(this.D.getResources().getColor(R.color.bg_D3EEFF));
|
||
this.G.setColor(this.D.getResources().getColor(R.color.color_00C4C9));
|
||
}
|
||
|
||
private void j() {
|
||
this.m = this.D.getResources().getDimension(R.dimen.grid_view_width) * 8.0f;
|
||
float f = this.m;
|
||
this.l = f / 2.0f;
|
||
float f2 = this.S + (f / 2.0f);
|
||
int i = this.s;
|
||
if (f2 >= i) {
|
||
this.S = i - (f / 2.0f);
|
||
}
|
||
float f3 = this.R;
|
||
float f4 = this.l;
|
||
if (f3 - (f4 / 2.0f) <= 0.0f) {
|
||
this.R = f4 / 2.0f;
|
||
} else {
|
||
float f5 = f3 + (f4 / 2.0f);
|
||
int i2 = this.r;
|
||
if (f5 >= i2) {
|
||
this.R = i2 - (f4 / 2.0f);
|
||
}
|
||
}
|
||
float f6 = this.l;
|
||
this.U = f6 / 2.0f;
|
||
float f7 = this.m;
|
||
this.V = f7 / 2.0f;
|
||
this.N = f6 * 0.79f;
|
||
this.O = f7 * 0.87f;
|
||
this.P = this.D.getResources().getDimension(R.dimen.ball_width_height);
|
||
this.Q = this.m * 0.47f;
|
||
this.T = getProgressRatio();
|
||
}
|
||
|
||
private void k() {
|
||
float f = this.R;
|
||
float f2 = this.l;
|
||
float f3 = this.S;
|
||
float f4 = this.m;
|
||
this.H = new RectF(f - (f2 / 2.0f), f3 - (f4 / 2.0f), f + (f2 / 2.0f), f3 + (f4 / 2.0f));
|
||
float centerX = this.H.centerX();
|
||
float centerY = this.H.centerY();
|
||
float f5 = this.N;
|
||
float f6 = this.O;
|
||
this.I = new RectF(centerX - (f5 / 2.0f), centerY - (f6 / 2.0f), (f5 / 2.0f) + centerX, (f6 / 2.0f) + centerY);
|
||
float f7 = this.O;
|
||
float f8 = (f7 / 2.0f) + centerY;
|
||
float f9 = centerY - (f7 / 2.0f);
|
||
float f10 = this.N;
|
||
this.J = new RectF(centerX - (f10 / 2.0f), f8 - f10, (f10 / 2.0f) + centerX, f8);
|
||
float f11 = this.N;
|
||
this.L = new RectF(centerX - (f11 / 2.0f), 0.0f, (f11 / 2.0f) + centerX, 0.0f);
|
||
float f12 = this.N;
|
||
this.K = new RectF(centerX - (f12 / 2.0f), f9, (f12 / 2.0f) + centerX, f12 + f9);
|
||
float f13 = centerY - (this.Q / 2.0f);
|
||
float f14 = this.P;
|
||
this.M = new RectF(centerX - (f14 / 2.0f), f13 - (f14 / 2.0f), centerX + (f14 / 2.0f), f13 + (f14 / 2.0f));
|
||
}
|
||
|
||
public void f() {
|
||
float centerY = this.M.centerY();
|
||
float centerY2 = this.H.centerY();
|
||
final float centerX = this.H.centerX();
|
||
ValueAnimator ofFloat = ValueAnimator.ofFloat(centerY, centerY2 - (this.Q / 2.0f));
|
||
ofFloat.setInterpolator(new BounceInterpolator());
|
||
ofFloat.setDuration(300L);
|
||
ofFloat.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { // from class: com.ubt.jimu.controller.component.WallPulleyView.1
|
||
@Override // android.animation.ValueAnimator.AnimatorUpdateListener
|
||
public void onAnimationUpdate(ValueAnimator valueAnimator) {
|
||
WallPulleyView.this.M.offsetTo(centerX - (WallPulleyView.this.P / 2.0f), ((Float) valueAnimator.getAnimatedValue()).floatValue() - (WallPulleyView.this.P / 2.0f));
|
||
WallPulleyView.this.invalidate();
|
||
}
|
||
});
|
||
ofFloat.start();
|
||
ValueAnimator ofFloat2 = ValueAnimator.ofFloat(this.Q, 0.0f);
|
||
ofFloat2.setInterpolator(new LinearInterpolator());
|
||
ofFloat2.setDuration(400L);
|
||
ofFloat2.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { // from class: com.ubt.jimu.controller.component.WallPulleyView.2
|
||
@Override // android.animation.ValueAnimator.AnimatorUpdateListener
|
||
public void onAnimationUpdate(ValueAnimator valueAnimator) {
|
||
WallPulleyView.this.d(((Float) valueAnimator.getAnimatedValue()).floatValue(), centerX);
|
||
WallPulleyView.this.invalidate();
|
||
}
|
||
});
|
||
ofFloat2.addListener(new Animator.AnimatorListener() { // from class: com.ubt.jimu.controller.component.WallPulleyView.3
|
||
@Override // android.animation.Animator.AnimatorListener
|
||
public void onAnimationCancel(Animator animator) {
|
||
LogUtils.c("onAnimationCancel");
|
||
WallPulleyView.this.g0 = 0.0f;
|
||
WallPulleyView.this.h0 = 0.0f;
|
||
WallPulleyView.this.invalidate();
|
||
}
|
||
|
||
@Override // android.animation.Animator.AnimatorListener
|
||
public void onAnimationEnd(Animator animator) {
|
||
LogUtils.c("onAnimationEnd");
|
||
WallPulleyView.this.g0 = 0.0f;
|
||
WallPulleyView.this.h0 = 0.0f;
|
||
WallPulleyView.this.invalidate();
|
||
}
|
||
|
||
@Override // android.animation.Animator.AnimatorListener
|
||
public void onAnimationRepeat(Animator animator) {
|
||
LogUtils.c("onAnimationRepeat");
|
||
}
|
||
|
||
@Override // android.animation.Animator.AnimatorListener
|
||
public void onAnimationStart(Animator animator) {
|
||
LogUtils.c("动画开始");
|
||
}
|
||
});
|
||
ofFloat2.start();
|
||
}
|
||
|
||
@Override // com.ubt.jimu.controller.view.control.SuperControlView
|
||
public float[] getViewCenterXY() {
|
||
return new float[]{this.H.centerX(), this.H.centerY()};
|
||
}
|
||
|
||
@Override // com.ubt.jimu.controller.view.control.SuperControlView, android.view.View
|
||
protected void onDraw(Canvas canvas) {
|
||
super.onDraw(canvas);
|
||
RectF rectF = this.I;
|
||
float f = this.N;
|
||
canvas.drawRoundRect(rectF, f / 2.0f, f / 2.0f, this.F);
|
||
canvas.drawArc(this.J, this.e0, this.f0, true, this.G);
|
||
canvas.drawArc(this.K, this.g0, this.h0, true, this.G);
|
||
canvas.drawRect(this.L, this.G);
|
||
canvas.drawBitmap(this.B, (Rect) null, this.H, this.E);
|
||
canvas.drawBitmap(this.C, (Rect) null, this.M, this.E);
|
||
}
|
||
|
||
@Override // android.view.View
|
||
public boolean onTouchEvent(MotionEvent motionEvent) {
|
||
int action = motionEvent.getAction();
|
||
if (action == 0) {
|
||
this.t = System.currentTimeMillis();
|
||
this.c0 = motionEvent.getX();
|
||
this.d0 = motionEvent.getY();
|
||
float centerX = this.M.centerX();
|
||
float centerY = this.M.centerY();
|
||
super.d();
|
||
this.f = false;
|
||
if (!b()) {
|
||
float f = this.c0;
|
||
float f2 = this.P;
|
||
if (f >= centerX - (f2 / 2.0f) && f <= centerX + (f2 / 2.0f)) {
|
||
float f3 = this.d0;
|
||
if (f3 >= centerY - (f2 / 2.0f) && f3 <= centerY + (f2 / 2.0f)) {
|
||
ControlTouchEvent controlTouchEvent = this.i;
|
||
if (controlTouchEvent != null) {
|
||
controlTouchEvent.a((SuperControlView) this);
|
||
}
|
||
}
|
||
}
|
||
LogUtils.c("不可移动");
|
||
return super.onTouchEvent(motionEvent);
|
||
}
|
||
float centerX2 = this.H.centerX();
|
||
float centerY2 = this.H.centerY();
|
||
float f4 = this.U;
|
||
float f5 = centerX2 - f4;
|
||
float f6 = centerX2 + f4;
|
||
float f7 = this.V;
|
||
float f8 = centerY2 - f7;
|
||
float f9 = centerY2 + f7;
|
||
float f10 = this.c0;
|
||
if (f10 >= f5 && f10 <= f6) {
|
||
float f11 = this.d0;
|
||
if (f11 >= f8 && f11 <= f9) {
|
||
this.a0 = super.a(f10);
|
||
this.b0 = super.b(this.d0);
|
||
bringToFront();
|
||
ControlTouchEvent controlTouchEvent2 = this.i;
|
||
if (controlTouchEvent2 != null) {
|
||
controlTouchEvent2.a((View) this);
|
||
}
|
||
}
|
||
}
|
||
return super.onTouchEvent(motionEvent);
|
||
return true;
|
||
}
|
||
if (action == 1) {
|
||
if (!this.f) {
|
||
LogUtils.c("蓄力器:ACTION_UP");
|
||
this.f = true;
|
||
b(motionEvent);
|
||
}
|
||
invalidate();
|
||
return true;
|
||
}
|
||
if (action != 2) {
|
||
if (action != 3) {
|
||
return true;
|
||
}
|
||
if (!this.f) {
|
||
LogUtils.c("蓄力器:ACTION_CANCEL");
|
||
this.f = true;
|
||
b(motionEvent);
|
||
}
|
||
invalidate();
|
||
return true;
|
||
}
|
||
if (b()) {
|
||
b(super.a(motionEvent, this.a0), super.b(motionEvent, this.b0));
|
||
if (this.i != null) {
|
||
float abs = Math.abs(motionEvent.getX() - this.c0);
|
||
float abs2 = Math.abs(motionEvent.getY() - this.d0);
|
||
if (abs <= 10.0f && abs2 <= 10.0f) {
|
||
return true;
|
||
}
|
||
this.i.b((View) this);
|
||
if (a(this.j)) {
|
||
if (this.e != null && getData() != null) {
|
||
String format = String.format(this.D.getResources().getString(R.string.control_remove_widget), getData().getWidgetInfo(this.D));
|
||
this.e.setOverlapState(true);
|
||
this.e.a(format);
|
||
}
|
||
b(false);
|
||
this.b.setColor(this.D.getResources().getColor(R.color.color_FF4979));
|
||
if (!this.n) {
|
||
SystemUtils.b(this.D);
|
||
this.n = true;
|
||
}
|
||
} else {
|
||
if (this.e != null && getData() != null) {
|
||
String format2 = String.format(this.D.getResources().getString(R.string.control_remove_widget_here), getData().getWidgetInfo(this.D));
|
||
this.e.setOverlapState(false);
|
||
this.e.a(format2);
|
||
}
|
||
RectF rectF = this.H;
|
||
PointF a = a(rectF.left, rectF.top);
|
||
this.k.offsetTo(a.x, a.y);
|
||
if (this.i.c((SuperControlView) this)) {
|
||
b(false);
|
||
this.b.setColor(this.D.getResources().getColor(R.color.bg_99B8BEC1));
|
||
} else {
|
||
b(true);
|
||
this.b.setColor(this.D.getResources().getColor(this.a));
|
||
}
|
||
this.n = false;
|
||
}
|
||
}
|
||
} else {
|
||
float y = motionEvent.getY();
|
||
motionEvent.getX();
|
||
float centerX3 = this.H.centerX();
|
||
float centerY3 = this.H.centerY();
|
||
float f12 = this.Q;
|
||
if (y < centerY3 - (f12 / 2.0f)) {
|
||
y = centerY3 - (f12 / 2.0f);
|
||
} else if (y > (f12 / 2.0f) + centerY3) {
|
||
y = centerY3 + (f12 / 2.0f);
|
||
}
|
||
RectF rectF2 = this.M;
|
||
float f13 = this.P;
|
||
rectF2.offsetTo(centerX3 - (f13 / 2.0f), y - (f13 / 2.0f));
|
||
c(centerX3, centerY3);
|
||
a(motionEvent);
|
||
}
|
||
invalidate();
|
||
return true;
|
||
}
|
||
|
||
public void setWallPulleyViewCommandParameterListener(WallPulleyViewCommandParameterListener wallPulleyViewCommandParameterListener) {
|
||
this.i0 = wallPulleyViewCommandParameterListener;
|
||
}
|
||
|
||
private void b(float f, float f2) {
|
||
this.H.offsetTo(f, f2);
|
||
this.j.offsetTo(f, f2);
|
||
b(this.H);
|
||
}
|
||
|
||
public boolean a(RectF rectF) {
|
||
RectF deleteViewRectF = getDeleteViewRectF();
|
||
if (deleteViewRectF == null) {
|
||
return false;
|
||
}
|
||
return RectF.intersects(deleteViewRectF, rectF);
|
||
}
|
||
|
||
private void b(MotionEvent motionEvent) {
|
||
AccumulatorConfig config;
|
||
if (b()) {
|
||
if (a(this.j) && this.i != null && (config = getData().getConfig()) != null) {
|
||
this.i.a(this, config.getConfigID());
|
||
}
|
||
if (this.i != null) {
|
||
RectF rectF = this.H;
|
||
PointF a = a(rectF.left, rectF.top);
|
||
this.k.offsetTo(a.x, a.y);
|
||
boolean c = this.i.c((SuperControlView) this);
|
||
LogUtils.c("isOverlap:" + c);
|
||
if (c) {
|
||
b(this.o, this.p);
|
||
this.b.setColor(this.D.getResources().getColor(this.a));
|
||
} else {
|
||
b(a.x, a.y);
|
||
this.i.a(this, this.H.centerX(), this.H.centerY());
|
||
}
|
||
this.i.c((View) this);
|
||
if (System.currentTimeMillis() - this.t < 350) {
|
||
this.i.a(this, getData());
|
||
}
|
||
}
|
||
b(false);
|
||
return;
|
||
}
|
||
a(motionEvent);
|
||
if (this.W > 0.0f) {
|
||
f();
|
||
}
|
||
ControlTouchEvent controlTouchEvent = this.i;
|
||
if (controlTouchEvent != null) {
|
||
controlTouchEvent.b((SuperControlView) this);
|
||
}
|
||
}
|
||
|
||
public void a(MotionEvent motionEvent) {
|
||
if (this.i0 == null) {
|
||
return;
|
||
}
|
||
if (motionEvent.getAction() != 1 && motionEvent.getAction() != 3) {
|
||
if (motionEvent.getAction() == 2) {
|
||
this.i0.b(this.W * 100.0f, getData());
|
||
return;
|
||
}
|
||
return;
|
||
}
|
||
this.i0.a(this.W * 100.0f, getData());
|
||
}
|
||
|
||
private void b(RectF rectF) {
|
||
float centerX = rectF.centerX();
|
||
float centerY = rectF.centerY();
|
||
RectF rectF2 = this.I;
|
||
float f = this.N;
|
||
float f2 = this.O;
|
||
rectF2.set(centerX - (f / 2.0f), centerY - (f2 / 2.0f), (f / 2.0f) + centerX, (f2 / 2.0f) + centerY);
|
||
float f3 = this.O;
|
||
float f4 = (f3 / 2.0f) + centerY;
|
||
float f5 = centerY - (f3 / 2.0f);
|
||
RectF rectF3 = this.J;
|
||
float f6 = this.N;
|
||
rectF3.set(centerX - (f6 / 2.0f), f4 - f6, (f6 / 2.0f) + centerX, f4);
|
||
RectF rectF4 = this.L;
|
||
float f7 = this.N;
|
||
rectF4.set(centerX - (f7 / 2.0f), 0.0f, (f7 / 2.0f) + centerY, 0.0f);
|
||
RectF rectF5 = this.K;
|
||
float f8 = this.N;
|
||
rectF5.set(centerX - (f8 / 2.0f), f5, (f8 / 2.0f) + centerX, f8 + f5);
|
||
float f9 = centerY - (this.Q / 2.0f);
|
||
RectF rectF6 = this.M;
|
||
float f10 = this.P;
|
||
rectF6.set(centerX - (f10 / 2.0f), f9 - (f10 / 2.0f), centerX + (f10 / 2.0f), f9 + (f10 / 2.0f));
|
||
}
|
||
}
|