jimu-decompiled/sources/com/aigestudio/wheelpicker/WheelPicker.java
2025-05-13 19:24:51 +02:00

847 lines
26 KiB
Java

package com.aigestudio.wheelpicker;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Camera;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Typeface;
import android.os.Build;
import android.os.Handler;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.widget.Scroller;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/* loaded from: classes.dex */
public class WheelPicker extends View implements IDebug, IWheelPicker, Runnable {
private static final String i0 = WheelPicker.class.getSimpleName();
private static final Handler j0 = new Handler();
private int A;
private int B;
private int C;
private int D;
private int E;
private int F;
private int G;
private int H;
private int I;
private int J;
private int K;
private int L;
private int M;
private int N;
private int O;
private int P;
private int Q;
private int R;
private int S;
private int T;
private int U;
private boolean V;
private boolean W;
private Paint a;
private boolean a0;
private Scroller b;
private boolean b0;
private VelocityTracker c;
private boolean c0;
private boolean d;
private boolean d0;
private OnItemSelectedListener e;
private boolean e0;
private OnWheelChangeListener f;
private boolean f0;
private Rect g;
private String g0;
private Rect h;
private boolean h0;
private Rect i;
private Rect j;
private Camera k;
private Matrix l;
private Matrix m;
private List n;
private String o;
private int p;
private int q;
private int r;
private int s;
private int t;
private int u;
private int v;
private int x;
private int y;
private int z;
public interface OnItemSelectedListener {
void a(WheelPicker wheelPicker, Object obj, int i);
}
public interface OnWheelChangeListener {
void a(int i);
void b(int i);
void c(int i);
}
public WheelPicker(Context context) {
this(context, null);
}
private int a(int i, int i2, int i3) {
return i == 1073741824 ? i2 : i == Integer.MIN_VALUE ? Math.min(i3, i2) : i3;
}
private void b() {
int i = this.C;
if (i == 1) {
this.O = this.g.left;
} else if (i != 2) {
this.O = this.M;
} else {
this.O = this.g.right;
}
this.P = (int) (this.N - ((this.a.ascent() + this.a.descent()) / 2.0f));
}
private void c() {
int i = this.G;
int i2 = this.D;
int i3 = i * i2;
this.I = this.c0 ? Integer.MIN_VALUE : ((-i2) * (this.n.size() - 1)) + i3;
if (this.c0) {
i3 = Integer.MAX_VALUE;
}
this.J = i3;
}
private void d() {
if (this.W) {
int i = this.y / 2;
int i2 = this.N;
int i3 = this.E;
int i4 = i2 + i3;
int i5 = i2 - i3;
Rect rect = this.h;
Rect rect2 = this.g;
rect.set(rect2.left, i4 - i, rect2.right, i4 + i);
Rect rect3 = this.i;
Rect rect4 = this.g;
rect3.set(rect4.left, i5 - i, rect4.right, i5 + i);
}
}
private void e() {
this.t = 0;
this.s = 0;
if (this.V) {
this.s = (int) this.a.measureText(String.valueOf(this.n.get(0)));
} else if (d(this.R)) {
this.s = (int) this.a.measureText(String.valueOf(this.n.get(this.R)));
} else if (TextUtils.isEmpty(this.o)) {
Iterator it = this.n.iterator();
while (it.hasNext()) {
this.s = Math.max(this.s, (int) this.a.measureText(String.valueOf(it.next())));
}
} else {
this.s = (int) this.a.measureText(this.o);
}
Paint.FontMetrics fontMetrics = this.a.getFontMetrics();
this.t = (int) (fontMetrics.bottom - fontMetrics.top);
}
private void f() {
int i = this.C;
if (i == 1) {
this.a.setTextAlign(Paint.Align.LEFT);
} else if (i != 2) {
this.a.setTextAlign(Paint.Align.CENTER);
} else {
this.a.setTextAlign(Paint.Align.RIGHT);
}
}
private void j() {
int i = this.p;
if (i < 2) {
throw new ArithmeticException("Wheel's visible item count can not be less than 2!");
}
if (i % 2 == 0) {
this.p = i + 1;
}
this.q = this.p + 2;
this.r = this.q / 2;
}
public int getCurrentItemPosition() {
return this.H;
}
public int getCurtainColor() {
return this.A;
}
public List getData() {
return this.n;
}
public int getIndicatorColor() {
return this.z;
}
public int getIndicatorSize() {
return this.y;
}
public int getItemAlign() {
return this.C;
}
public int getItemSpace() {
return this.B;
}
public int getItemTextColor() {
return this.u;
}
public int getItemTextSize() {
return this.x;
}
public String getMaximumWidthText() {
return this.o;
}
public int getMaximumWidthTextPosition() {
return this.R;
}
public int getSelectedItemPosition() {
return this.G;
}
public int getSelectedItemTextColor() {
return this.v;
}
public Typeface getTypeface() {
Paint paint = this.a;
if (paint != null) {
return paint.getTypeface();
}
return null;
}
public int getVisibleItemCount() {
return this.p;
}
@Override // android.view.View
protected void onDraw(Canvas canvas) {
String valueOf;
int i;
OnWheelChangeListener onWheelChangeListener = this.f;
if (onWheelChangeListener != null) {
onWheelChangeListener.a(this.Q);
}
int i2 = (-this.Q) / this.D;
int i3 = this.r;
int i4 = i2 - i3;
int i5 = this.G + i4;
int i6 = -i3;
while (i5 < this.G + i4 + this.q) {
if (this.c0) {
int size = i5 % this.n.size();
if (size < 0) {
size += this.n.size();
}
valueOf = String.valueOf(this.n.get(size));
} else {
valueOf = d(i5) ? String.valueOf(this.n.get(i5)) : "";
}
this.a.setColor(this.u);
this.a.setStyle(Paint.Style.FILL);
int i7 = this.P;
int i8 = this.D;
int i9 = (i6 * i8) + i7 + (this.Q % i8);
if (this.d0) {
int abs = i7 - Math.abs(i7 - i9);
int i10 = this.g.top;
int i11 = this.P;
float f = (-(1.0f - (((abs - i10) * 1.0f) / (i11 - i10)))) * 90.0f * (i9 > i11 ? 1 : i9 < i11 ? -1 : 0);
if (f < -90.0f) {
f = -90.0f;
}
if (f > 90.0f) {
f = 90.0f;
}
i = c((int) f);
int i12 = this.M;
int i13 = this.C;
if (i13 == 1) {
i12 = this.g.left;
} else if (i13 == 2) {
i12 = this.g.right;
}
int i14 = this.N - i;
this.k.save();
this.k.rotateX(f);
this.k.getMatrix(this.l);
this.k.restore();
float f2 = -i12;
float f3 = -i14;
this.l.preTranslate(f2, f3);
float f4 = i12;
float f5 = i14;
this.l.postTranslate(f4, f5);
this.k.save();
this.k.translate(0.0f, 0.0f, a(r12));
this.k.getMatrix(this.m);
this.k.restore();
this.m.preTranslate(f2, f3);
this.m.postTranslate(f4, f5);
this.l.postConcat(this.m);
} else {
i = 0;
}
if (this.b0) {
int i15 = this.P;
int abs2 = (int) ((((i15 - Math.abs(i15 - i9)) * 1.0f) / this.P) * 255.0f);
if (abs2 < 0) {
abs2 = 0;
}
this.a.setAlpha(abs2);
}
if (this.d0) {
i9 = this.P - i;
}
if (this.v != -1) {
canvas.save();
if (this.d0) {
canvas.concat(this.l);
}
canvas.clipRect(this.j, Region.Op.DIFFERENCE);
float f6 = i9;
canvas.drawText(valueOf, this.O, f6, this.a);
canvas.restore();
this.a.setColor(this.v);
canvas.save();
if (this.d0) {
canvas.concat(this.l);
}
canvas.clipRect(this.j);
canvas.drawText(valueOf, this.O, f6, this.a);
canvas.restore();
} else {
canvas.save();
canvas.clipRect(this.g);
if (this.d0) {
canvas.concat(this.l);
}
canvas.drawText(valueOf, this.O, i9, this.a);
canvas.restore();
}
if (this.h0) {
canvas.save();
canvas.clipRect(this.g);
this.a.setColor(-1166541);
int i16 = this.N + (this.D * i6);
Rect rect = this.g;
float f7 = i16;
canvas.drawLine(rect.left, f7, rect.right, f7, this.a);
this.a.setColor(-13421586);
this.a.setStyle(Paint.Style.STROKE);
int i17 = i16 - this.E;
Rect rect2 = this.g;
canvas.drawRect(rect2.left, i17, rect2.right, i17 + this.D, this.a);
canvas.restore();
}
i5++;
i6++;
}
if (this.a0) {
this.a.setColor(this.A);
this.a.setStyle(Paint.Style.FILL);
canvas.drawRect(this.j, this.a);
}
if (this.W) {
this.a.setColor(this.z);
this.a.setStyle(Paint.Style.FILL);
canvas.drawRect(this.h, this.a);
canvas.drawRect(this.i, this.a);
}
if (this.h0) {
this.a.setColor(1144254003);
this.a.setStyle(Paint.Style.FILL);
canvas.drawRect(0.0f, 0.0f, getPaddingLeft(), getHeight(), this.a);
canvas.drawRect(0.0f, 0.0f, getWidth(), getPaddingTop(), this.a);
canvas.drawRect(getWidth() - getPaddingRight(), 0.0f, getWidth(), getHeight(), this.a);
canvas.drawRect(0.0f, getHeight() - getPaddingBottom(), getWidth(), getHeight(), this.a);
}
}
@Override // android.view.View
protected void onMeasure(int i, int i2) {
int mode = View.MeasureSpec.getMode(i);
int mode2 = View.MeasureSpec.getMode(i2);
int size = View.MeasureSpec.getSize(i);
int size2 = View.MeasureSpec.getSize(i2);
int i3 = this.s;
int i4 = this.t;
int i5 = this.p;
int i6 = (i4 * i5) + (this.B * (i5 - 1));
if (this.d0) {
i6 = (int) ((i6 * 2) / 3.141592653589793d);
}
if (this.h0) {
Log.i(i0, "Wheel's content size is (" + i3 + ":" + i6 + ")");
}
int paddingLeft = i3 + getPaddingLeft() + getPaddingRight();
int paddingTop = i6 + getPaddingTop() + getPaddingBottom();
if (this.h0) {
Log.i(i0, "Wheel's size is (" + paddingLeft + ":" + paddingTop + ")");
}
setMeasuredDimension(a(mode, size, paddingLeft), a(mode2, size2, paddingTop));
}
@Override // android.view.View
protected void onSizeChanged(int i, int i2, int i3, int i4) {
this.g.set(getPaddingLeft(), getPaddingTop(), getWidth() - getPaddingRight(), getHeight() - getPaddingBottom());
if (this.h0) {
Log.i(i0, "Wheel's drawn rect size is (" + this.g.width() + ":" + this.g.height() + ") and location is (" + this.g.left + ":" + this.g.top + ")");
}
this.M = this.g.centerX();
this.N = this.g.centerY();
b();
this.F = this.g.height() / 2;
this.D = this.g.height() / this.p;
this.E = (this.D * 3) / 5;
c();
d();
a();
}
@Override // android.view.View
public boolean onTouchEvent(MotionEvent motionEvent) {
int action = motionEvent.getAction();
if (action == 0) {
this.d = true;
if (getParent() != null) {
getParent().requestDisallowInterceptTouchEvent(true);
}
VelocityTracker velocityTracker = this.c;
if (velocityTracker == null) {
this.c = VelocityTracker.obtain();
} else {
velocityTracker.clear();
}
this.c.addMovement(motionEvent);
if (!this.b.isFinished()) {
this.b.abortAnimation();
this.f0 = true;
}
int y = (int) motionEvent.getY();
this.S = y;
this.T = y;
} else if (action == 1) {
if (getParent() != null) {
getParent().requestDisallowInterceptTouchEvent(false);
}
if (!this.e0 || this.f0) {
this.c.addMovement(motionEvent);
if (Build.VERSION.SDK_INT >= 4) {
this.c.computeCurrentVelocity(1000, this.L);
} else {
this.c.computeCurrentVelocity(1000);
}
this.f0 = false;
int yVelocity = (int) this.c.getYVelocity();
if (Math.abs(yVelocity) > this.K) {
this.b.fling(0, this.Q, 0, yVelocity, 0, 0, this.I, this.J);
Scroller scroller = this.b;
scroller.setFinalY(scroller.getFinalY() + b(this.b.getFinalY() % this.D));
} else {
Scroller scroller2 = this.b;
int i = this.Q;
scroller2.startScroll(0, i, 0, b(i % this.D));
}
if (!this.c0) {
int finalY = this.b.getFinalY();
int i2 = this.J;
if (finalY > i2) {
this.b.setFinalY(i2);
} else {
int finalY2 = this.b.getFinalY();
int i3 = this.I;
if (finalY2 < i3) {
this.b.setFinalY(i3);
}
}
}
j0.post(this);
VelocityTracker velocityTracker2 = this.c;
if (velocityTracker2 != null) {
velocityTracker2.recycle();
this.c = null;
}
}
} else if (action != 2) {
if (action == 3) {
if (getParent() != null) {
getParent().requestDisallowInterceptTouchEvent(false);
}
VelocityTracker velocityTracker3 = this.c;
if (velocityTracker3 != null) {
velocityTracker3.recycle();
this.c = null;
}
}
} else if (Math.abs(this.T - motionEvent.getY()) < this.U) {
this.e0 = true;
} else {
this.e0 = false;
this.c.addMovement(motionEvent);
OnWheelChangeListener onWheelChangeListener = this.f;
if (onWheelChangeListener != null) {
onWheelChangeListener.b(1);
}
float y2 = motionEvent.getY() - this.S;
if (Math.abs(y2) >= 1.0f) {
this.Q = (int) (this.Q + y2);
this.S = (int) motionEvent.getY();
invalidate();
}
}
return true;
}
@Override // java.lang.Runnable
public void run() {
List list = this.n;
if (list == null || list.size() == 0) {
return;
}
if (this.b.isFinished() && !this.f0) {
int i = this.D;
if (i == 0) {
return;
}
int size = (((-this.Q) / i) + this.G) % this.n.size();
if (size < 0) {
size += this.n.size();
}
if (this.h0) {
Log.i(i0, size + ":" + this.n.get(size) + ":" + this.Q);
}
this.H = size;
OnItemSelectedListener onItemSelectedListener = this.e;
if (onItemSelectedListener != null && this.d) {
onItemSelectedListener.a(this, this.n.get(size), size);
}
OnWheelChangeListener onWheelChangeListener = this.f;
if (onWheelChangeListener != null && this.d) {
onWheelChangeListener.c(size);
this.f.b(0);
}
}
if (this.b.computeScrollOffset()) {
OnWheelChangeListener onWheelChangeListener2 = this.f;
if (onWheelChangeListener2 != null) {
onWheelChangeListener2.b(2);
}
this.Q = this.b.getCurrY();
postInvalidate();
j0.postDelayed(this, 16L);
}
}
public void setAtmospheric(boolean z) {
this.b0 = z;
invalidate();
}
public void setCurtain(boolean z) {
this.a0 = z;
a();
invalidate();
}
public void setCurtainColor(int i) {
this.A = i;
invalidate();
}
public void setCurved(boolean z) {
this.d0 = z;
requestLayout();
invalidate();
}
public void setCyclic(boolean z) {
this.c0 = z;
c();
invalidate();
}
public void setData(List list) {
if (list == null) {
throw new NullPointerException("WheelPicker's data can not be null!");
}
this.n = list;
if (this.G > list.size() - 1 || this.H > list.size() - 1) {
int size = list.size() - 1;
this.H = size;
this.G = size;
} else {
this.G = this.H;
}
this.Q = 0;
e();
c();
requestLayout();
invalidate();
}
public void setDebug(boolean z) {
this.h0 = z;
}
public void setIndicator(boolean z) {
this.W = z;
d();
invalidate();
}
public void setIndicatorColor(int i) {
this.z = i;
invalidate();
}
public void setIndicatorSize(int i) {
this.y = i;
d();
invalidate();
}
public void setItemAlign(int i) {
this.C = i;
f();
b();
invalidate();
}
public void setItemSpace(int i) {
this.B = i;
requestLayout();
invalidate();
}
public void setItemTextColor(int i) {
this.u = i;
invalidate();
}
public void setItemTextSize(int i) {
this.x = i;
this.a.setTextSize(this.x);
e();
requestLayout();
invalidate();
}
public void setMaximumWidthText(String str) {
if (str == null) {
throw new NullPointerException("Maximum width text can not be null!");
}
this.o = str;
e();
requestLayout();
invalidate();
}
public void setMaximumWidthTextPosition(int i) {
if (d(i)) {
this.R = i;
e();
requestLayout();
invalidate();
return;
}
throw new ArrayIndexOutOfBoundsException("Maximum width text Position must in [0, " + this.n.size() + "), but current is " + i);
}
public void setOnItemSelectedListener(OnItemSelectedListener onItemSelectedListener) {
this.e = onItemSelectedListener;
}
public void setOnWheelChangeListener(OnWheelChangeListener onWheelChangeListener) {
this.f = onWheelChangeListener;
}
public void setSameWidth(boolean z) {
this.V = z;
e();
requestLayout();
invalidate();
}
public void setSelectedItemPosition(int i) {
a(i, true);
}
public void setSelectedItemTextColor(int i) {
this.v = i;
a();
invalidate();
}
public void setTypeface(Typeface typeface) {
Paint paint = this.a;
if (paint != null) {
paint.setTypeface(typeface);
}
e();
requestLayout();
invalidate();
}
public void setVisibleItemCount(int i) {
this.p = i;
j();
requestLayout();
}
public WheelPicker(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
this.K = 50;
this.L = 8000;
this.U = 8;
this.W = true;
TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, R$styleable.WheelPicker);
int resourceId = obtainStyledAttributes.getResourceId(R$styleable.WheelPicker_wheel_data, 0);
this.n = Arrays.asList(getResources().getStringArray(resourceId == 0 ? R$array.WheelArrayWeek : resourceId));
this.x = obtainStyledAttributes.getDimensionPixelSize(R$styleable.WheelPicker_wheel_item_text_size, getResources().getDimensionPixelSize(R$dimen.wheel_item_text_size));
this.p = obtainStyledAttributes.getInt(R$styleable.WheelPicker_wheel_visible_item_count, 7);
this.G = obtainStyledAttributes.getInt(R$styleable.WheelPicker_wheel_selected_item_position, 0);
this.V = obtainStyledAttributes.getBoolean(R$styleable.WheelPicker_wheel_same_width, false);
this.R = obtainStyledAttributes.getInt(R$styleable.WheelPicker_wheel_maximum_width_text_position, -1);
this.o = obtainStyledAttributes.getString(R$styleable.WheelPicker_wheel_maximum_width_text);
this.v = obtainStyledAttributes.getColor(R$styleable.WheelPicker_wheel_selected_item_text_color, -1);
this.u = obtainStyledAttributes.getColor(R$styleable.WheelPicker_wheel_item_text_color, -7829368);
this.B = obtainStyledAttributes.getDimensionPixelSize(R$styleable.WheelPicker_wheel_item_space, getResources().getDimensionPixelSize(R$dimen.wheel_item_space));
this.c0 = obtainStyledAttributes.getBoolean(R$styleable.WheelPicker_wheel_cyclic, false);
this.W = obtainStyledAttributes.getBoolean(R$styleable.WheelPicker_wheel_indicator, false);
this.z = obtainStyledAttributes.getColor(R$styleable.WheelPicker_wheel_indicator_color, -1166541);
this.y = obtainStyledAttributes.getDimensionPixelSize(R$styleable.WheelPicker_wheel_indicator_size, getResources().getDimensionPixelSize(R$dimen.wheel_indicator_size));
this.a0 = obtainStyledAttributes.getBoolean(R$styleable.WheelPicker_wheel_curtain, false);
this.A = obtainStyledAttributes.getColor(R$styleable.WheelPicker_wheel_curtain_color, -1996488705);
this.b0 = obtainStyledAttributes.getBoolean(R$styleable.WheelPicker_wheel_atmospheric, false);
this.d0 = obtainStyledAttributes.getBoolean(R$styleable.WheelPicker_wheel_curved, false);
this.C = obtainStyledAttributes.getInt(R$styleable.WheelPicker_wheel_item_align, 0);
this.g0 = obtainStyledAttributes.getString(R$styleable.WheelPicker_wheel_font_path);
obtainStyledAttributes.recycle();
j();
this.a = new Paint(69);
this.a.setTextSize(this.x);
if (this.g0 != null) {
setTypeface(Typeface.createFromAsset(context.getAssets(), this.g0));
}
f();
e();
this.b = new Scroller(getContext());
if (Build.VERSION.SDK_INT >= 4) {
ViewConfiguration viewConfiguration = ViewConfiguration.get(getContext());
this.K = viewConfiguration.getScaledMinimumFlingVelocity();
this.L = viewConfiguration.getScaledMaximumFlingVelocity();
this.U = viewConfiguration.getScaledTouchSlop();
}
this.g = new Rect();
this.h = new Rect();
this.i = new Rect();
this.j = new Rect();
this.k = new Camera();
this.l = new Matrix();
this.m = new Matrix();
}
private void a() {
if (this.a0 || this.v != -1) {
Rect rect = this.j;
Rect rect2 = this.g;
int i = rect2.left;
int i2 = this.N;
int i3 = this.E;
rect.set(i, i2 - i3, rect2.right, i2 + i3);
}
}
private int a(int i) {
return (int) (this.F - (Math.cos(Math.toRadians(i)) * this.F));
}
private int c(int i) {
return (int) (Math.sin(Math.toRadians(i)) * this.F);
}
public void a(int i, boolean z) {
this.d = false;
if (z && this.b.isFinished()) {
int size = getData().size();
int i2 = i - this.H;
if (i2 == 0) {
return;
}
if (this.c0 && Math.abs(i2) > size / 2) {
if (i2 > 0) {
size = -size;
}
i2 += size;
}
Scroller scroller = this.b;
scroller.startScroll(0, scroller.getCurrY(), 0, (-i2) * this.D);
j0.post(this);
return;
}
if (!this.b.isFinished()) {
this.b.abortAnimation();
}
int max = Math.max(Math.min(i, this.n.size() - 1), 0);
this.G = max;
this.H = max;
this.Q = 0;
c();
requestLayout();
invalidate();
}
private int b(int i) {
int i2;
if (Math.abs(i) <= this.E) {
return -i;
}
if (this.Q < 0) {
i2 = -this.D;
} else {
i2 = this.D;
}
return i2 - i;
}
private boolean d(int i) {
return i >= 0 && i < this.n.size();
}
}