mirror of https://github.com/NekoX-Dev/NekoX.git
116 lines
3.5 KiB
Java
116 lines
3.5 KiB
Java
package org.telegram.ui.Components;
|
|
|
|
import android.animation.Animator;
|
|
import android.animation.AnimatorListenerAdapter;
|
|
import android.content.Context;
|
|
import android.util.TypedValue;
|
|
import android.view.Gravity;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.view.ViewPropertyAnimator;
|
|
import android.widget.TextView;
|
|
|
|
import org.telegram.messenger.AndroidUtilities;
|
|
import org.telegram.ui.ActionBar.Theme;
|
|
|
|
public class Tooltip extends TextView {
|
|
|
|
private View anchor;
|
|
private ViewPropertyAnimator animator;
|
|
private boolean showing;
|
|
|
|
Runnable dismissRunnable = () -> {
|
|
animator = animate().alpha(0).setListener(new AnimatorListenerAdapter() {
|
|
@Override
|
|
public void onAnimationEnd(Animator animation) {
|
|
setVisibility(View.GONE);
|
|
}
|
|
}).setDuration(300);
|
|
animator.start();
|
|
};
|
|
|
|
|
|
public Tooltip(Context context, ViewGroup parentView, int backgroundColor, int textColor) {
|
|
super(context);
|
|
|
|
setBackgroundDrawable(Theme.createRoundRectDrawable(AndroidUtilities.dp(3), backgroundColor));
|
|
setTextColor(textColor);
|
|
setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
|
|
setPadding(AndroidUtilities.dp(8), AndroidUtilities.dp(7), AndroidUtilities.dp(8), AndroidUtilities.dp(7));
|
|
setGravity(Gravity.CENTER_VERTICAL);
|
|
|
|
parentView.addView(this, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.LEFT | Gravity.TOP, 5, 0, 5, 3));
|
|
setVisibility(GONE);
|
|
}
|
|
|
|
@Override
|
|
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
|
super.onLayout(changed, left, top, right, bottom);
|
|
updateTooltipPosition();
|
|
}
|
|
|
|
private void updateTooltipPosition() {
|
|
if (anchor == null) {
|
|
return;
|
|
}
|
|
int top = 0;
|
|
int left = 0;
|
|
|
|
View containerView = (View) getParent();
|
|
View view = anchor;
|
|
|
|
while (view != containerView) {
|
|
top += view.getTop();
|
|
left += view.getLeft();
|
|
view = (View) view.getParent();
|
|
}
|
|
int x = left + anchor.getWidth() / 2 - getMeasuredWidth() / 2;
|
|
if (x < 0) {
|
|
x = 0;
|
|
} else if (x + getMeasuredWidth() > containerView.getMeasuredWidth()) {
|
|
x = containerView.getMeasuredWidth() - getMeasuredWidth() - AndroidUtilities.dp(16);
|
|
}
|
|
setTranslationX(x);
|
|
|
|
int y = top - getMeasuredHeight();
|
|
setTranslationY(y);
|
|
}
|
|
|
|
public void show(View anchor) {
|
|
if (anchor == null) {
|
|
return;
|
|
}
|
|
this.anchor = anchor;
|
|
updateTooltipPosition();
|
|
showing = true;
|
|
|
|
AndroidUtilities.cancelRunOnUIThread(dismissRunnable);
|
|
AndroidUtilities.runOnUIThread(dismissRunnable, 2000);
|
|
if (animator != null) {
|
|
animator.setListener(null);
|
|
animator.cancel();
|
|
animator = null;
|
|
}
|
|
if (getVisibility() != VISIBLE) {
|
|
setAlpha(0f);
|
|
setVisibility(VISIBLE);
|
|
animator = animate().setDuration(300).alpha(1f).setListener(null);
|
|
animator.start();
|
|
}
|
|
}
|
|
|
|
public void hide() {
|
|
if (showing) {
|
|
if (animator != null) {
|
|
animator.setListener(null);
|
|
animator.cancel();
|
|
animator = null;
|
|
}
|
|
|
|
AndroidUtilities.cancelRunOnUIThread(dismissRunnable);
|
|
dismissRunnable.run();
|
|
}
|
|
showing = false;
|
|
}
|
|
}
|