230 lines
8.5 KiB
Java
230 lines
8.5 KiB
Java
package androidx.viewpager.widget;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Paint;
|
|
import android.graphics.Rect;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.util.AttributeSet;
|
|
import android.view.MotionEvent;
|
|
import android.view.View;
|
|
import android.view.ViewConfiguration;
|
|
import androidx.annotation.ColorInt;
|
|
import androidx.annotation.ColorRes;
|
|
import androidx.annotation.DrawableRes;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.core.content.ContextCompat;
|
|
public class PagerTabStrip extends PagerTitleStrip {
|
|
private static final int FULL_UNDERLINE_HEIGHT = 1;
|
|
private static final int INDICATOR_HEIGHT = 3;
|
|
private static final int MIN_PADDING_BOTTOM = 6;
|
|
private static final int MIN_STRIP_HEIGHT = 32;
|
|
private static final int MIN_TEXT_SPACING = 64;
|
|
private static final int TAB_PADDING = 16;
|
|
private static final int TAB_SPACING = 32;
|
|
private static final String TAG = "PagerTabStrip";
|
|
private boolean mDrawFullUnderline;
|
|
private boolean mDrawFullUnderlineSet;
|
|
private int mFullUnderlineHeight;
|
|
private boolean mIgnoreTap;
|
|
private int mIndicatorColor;
|
|
private int mIndicatorHeight;
|
|
private float mInitialMotionX;
|
|
private float mInitialMotionY;
|
|
private int mMinPaddingBottom;
|
|
private int mMinStripHeight;
|
|
private int mMinTextSpacing;
|
|
private int mTabAlpha;
|
|
private int mTabPadding;
|
|
private final Paint mTabPaint;
|
|
private final Rect mTempRect;
|
|
private int mTouchSlop;
|
|
|
|
/* renamed from: androidx.viewpager.widget.PagerTabStrip$1 reason: invalid class name */
|
|
public class AnonymousClass1 implements View.OnClickListener {
|
|
public AnonymousClass1() {
|
|
}
|
|
|
|
@Override // android.view.View.OnClickListener
|
|
public void onClick(View view) {
|
|
ViewPager viewPager = PagerTabStrip.this.mPager;
|
|
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
|
|
}
|
|
}
|
|
|
|
/* renamed from: androidx.viewpager.widget.PagerTabStrip$2 reason: invalid class name */
|
|
public class AnonymousClass2 implements View.OnClickListener {
|
|
public AnonymousClass2() {
|
|
}
|
|
|
|
@Override // android.view.View.OnClickListener
|
|
public void onClick(View view) {
|
|
ViewPager viewPager = PagerTabStrip.this.mPager;
|
|
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
|
|
}
|
|
}
|
|
|
|
public PagerTabStrip(@NonNull Context context) {
|
|
this(context, null);
|
|
}
|
|
|
|
public PagerTabStrip(@NonNull Context context, @Nullable AttributeSet attributeSet) {
|
|
super(context, attributeSet);
|
|
Paint paint = new Paint();
|
|
this.mTabPaint = paint;
|
|
this.mTempRect = new Rect();
|
|
this.mTabAlpha = 255;
|
|
this.mDrawFullUnderline = false;
|
|
this.mDrawFullUnderlineSet = false;
|
|
int i = this.mTextColor;
|
|
this.mIndicatorColor = i;
|
|
paint.setColor(i);
|
|
float f = context.getResources().getDisplayMetrics().density;
|
|
this.mIndicatorHeight = (int) ((3.0f * f) + 0.5f);
|
|
this.mMinPaddingBottom = (int) ((6.0f * f) + 0.5f);
|
|
this.mMinTextSpacing = (int) (64.0f * f);
|
|
this.mTabPadding = (int) ((16.0f * f) + 0.5f);
|
|
this.mFullUnderlineHeight = (int) ((1.0f * f) + 0.5f);
|
|
this.mMinStripHeight = (int) ((f * 32.0f) + 0.5f);
|
|
this.mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
|
|
setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), getPaddingBottom());
|
|
setTextSpacing(getTextSpacing());
|
|
setWillNotDraw(false);
|
|
this.mPrevText.setFocusable(true);
|
|
this.mPrevText.setOnClickListener(new AnonymousClass1());
|
|
this.mNextText.setFocusable(true);
|
|
this.mNextText.setOnClickListener(new AnonymousClass2());
|
|
if (getBackground() == null) {
|
|
this.mDrawFullUnderline = true;
|
|
}
|
|
}
|
|
|
|
public boolean getDrawFullUnderline() {
|
|
return this.mDrawFullUnderline;
|
|
}
|
|
|
|
@Override // androidx.viewpager.widget.PagerTitleStrip
|
|
public int getMinHeight() {
|
|
return Math.max(super.getMinHeight(), this.mMinStripHeight);
|
|
}
|
|
|
|
@ColorInt
|
|
public int getTabIndicatorColor() {
|
|
return this.mIndicatorColor;
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void onDraw(Canvas canvas) {
|
|
super.onDraw(canvas);
|
|
int height = getHeight();
|
|
int left = this.mCurrText.getLeft() - this.mTabPadding;
|
|
int right = this.mCurrText.getRight() + this.mTabPadding;
|
|
this.mTabPaint.setColor((this.mTabAlpha << 24) | (this.mIndicatorColor & 16777215));
|
|
float f = (float) height;
|
|
canvas.drawRect((float) left, (float) (height - this.mIndicatorHeight), (float) right, f, this.mTabPaint);
|
|
if (this.mDrawFullUnderline) {
|
|
this.mTabPaint.setColor(-16777216 | (this.mIndicatorColor & 16777215));
|
|
canvas.drawRect((float) getPaddingLeft(), (float) (height - this.mFullUnderlineHeight), (float) (getWidth() - getPaddingRight()), f, this.mTabPaint);
|
|
}
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public boolean onTouchEvent(MotionEvent motionEvent) {
|
|
int action = motionEvent.getAction();
|
|
if (action != 0 && this.mIgnoreTap) {
|
|
return false;
|
|
}
|
|
float x2 = motionEvent.getX();
|
|
float y2 = motionEvent.getY();
|
|
if (action == 0) {
|
|
this.mInitialMotionX = x2;
|
|
this.mInitialMotionY = y2;
|
|
this.mIgnoreTap = false;
|
|
} else if (action != 1) {
|
|
if (action == 2 && (Math.abs(x2 - this.mInitialMotionX) > ((float) this.mTouchSlop) || Math.abs(y2 - this.mInitialMotionY) > ((float) this.mTouchSlop))) {
|
|
this.mIgnoreTap = true;
|
|
}
|
|
} else if (x2 < ((float) (this.mCurrText.getLeft() - this.mTabPadding))) {
|
|
ViewPager viewPager = this.mPager;
|
|
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
|
|
} else if (x2 > ((float) (this.mCurrText.getRight() + this.mTabPadding))) {
|
|
ViewPager viewPager2 = this.mPager;
|
|
viewPager2.setCurrentItem(viewPager2.getCurrentItem() + 1);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void setBackgroundColor(@ColorInt int i) {
|
|
super.setBackgroundColor(i);
|
|
if (!this.mDrawFullUnderlineSet) {
|
|
this.mDrawFullUnderline = (i & -16777216) == 0;
|
|
}
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void setBackgroundDrawable(Drawable drawable) {
|
|
super.setBackgroundDrawable(drawable);
|
|
if (!this.mDrawFullUnderlineSet) {
|
|
this.mDrawFullUnderline = drawable == null;
|
|
}
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void setBackgroundResource(@DrawableRes int i) {
|
|
super.setBackgroundResource(i);
|
|
if (!this.mDrawFullUnderlineSet) {
|
|
this.mDrawFullUnderline = i == 0;
|
|
}
|
|
}
|
|
|
|
public void setDrawFullUnderline(boolean z2) {
|
|
this.mDrawFullUnderline = z2;
|
|
this.mDrawFullUnderlineSet = true;
|
|
invalidate();
|
|
}
|
|
|
|
@Override // android.view.View
|
|
public void setPadding(int i, int i2, int i3, int i4) {
|
|
int i5 = this.mMinPaddingBottom;
|
|
if (i4 < i5) {
|
|
i4 = i5;
|
|
}
|
|
super.setPadding(i, i2, i3, i4);
|
|
}
|
|
|
|
public void setTabIndicatorColor(@ColorInt int i) {
|
|
this.mIndicatorColor = i;
|
|
this.mTabPaint.setColor(i);
|
|
invalidate();
|
|
}
|
|
|
|
public void setTabIndicatorColorResource(@ColorRes int i) {
|
|
setTabIndicatorColor(ContextCompat.getColor(getContext(), i));
|
|
}
|
|
|
|
@Override // androidx.viewpager.widget.PagerTitleStrip
|
|
public void setTextSpacing(int i) {
|
|
int i2 = this.mMinTextSpacing;
|
|
if (i < i2) {
|
|
i = i2;
|
|
}
|
|
super.setTextSpacing(i);
|
|
}
|
|
|
|
@Override // androidx.viewpager.widget.PagerTitleStrip
|
|
public void updateTextPositions(int i, float f, boolean z2) {
|
|
Rect rect = this.mTempRect;
|
|
int height = getHeight();
|
|
int left = this.mCurrText.getLeft() - this.mTabPadding;
|
|
int right = this.mCurrText.getRight() + this.mTabPadding;
|
|
int i2 = height - this.mIndicatorHeight;
|
|
rect.set(left, i2, right, height);
|
|
super.updateTextPositions(i, f, z2);
|
|
this.mTabAlpha = (int) (Math.abs(f - 0.5f) * 2.0f * 255.0f);
|
|
rect.union(this.mCurrText.getLeft() - this.mTabPadding, i2, this.mCurrText.getRight() + this.mTabPadding, height);
|
|
invalidate(rect);
|
|
}
|
|
}
|