mirror of https://github.com/NekoX-Dev/NekoX.git
127 lines
6.1 KiB
Java
127 lines
6.1 KiB
Java
package org.telegram.ui.Components;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Canvas;
|
|
import android.graphics.Color;
|
|
import android.graphics.LinearGradient;
|
|
import android.graphics.Paint;
|
|
import android.graphics.PorterDuff;
|
|
import android.graphics.PorterDuffXfermode;
|
|
import android.graphics.Shader;
|
|
import android.util.TypedValue;
|
|
import android.view.Gravity;
|
|
import android.view.View;
|
|
import android.widget.FrameLayout;
|
|
import android.widget.TextView;
|
|
|
|
import androidx.core.graphics.ColorUtils;
|
|
|
|
import org.telegram.messenger.AndroidUtilities;
|
|
import org.telegram.messenger.LocaleController;
|
|
import org.telegram.messenger.R;
|
|
import org.telegram.ui.ActionBar.SimpleTextView;
|
|
import org.telegram.ui.ActionBar.Theme;
|
|
|
|
import java.util.Random;
|
|
|
|
public class SharedMediaFastScrollTooltip extends FrameLayout {
|
|
|
|
public SharedMediaFastScrollTooltip(Context context) {
|
|
super(context);
|
|
TextView textView = new TextView(context);
|
|
textView.setText(LocaleController.getString("SharedMediaFastScrollHint", R.string.SharedMediaFastScrollHint));
|
|
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
|
|
textView.setMaxLines(3);
|
|
textView.setTextColor(Theme.getColor(Theme.key_chat_gifSaveHintText));
|
|
|
|
setBackground(Theme.createRoundRectDrawable(AndroidUtilities.dp(6), Theme.getColor(Theme.key_chat_gifSaveHintBackground)));
|
|
addView(textView, LayoutHelper.createFrame(LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT, Gravity.CENTER_VERTICAL, 46, 8, 8, 8));
|
|
|
|
TooltipDrawableView hintView = new TooltipDrawableView(context);
|
|
addView(hintView, LayoutHelper.createFrame(29, 32, 0, 8, 8, 8, 8));
|
|
}
|
|
|
|
@Override
|
|
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
|
|
super.onMeasure(MeasureSpec.makeMeasureSpec(Math.min(AndroidUtilities.dp(300), MeasureSpec.getSize(widthMeasureSpec) - AndroidUtilities.dp(32)), MeasureSpec.AT_MOST), heightMeasureSpec);
|
|
}
|
|
|
|
private class TooltipDrawableView extends View {
|
|
|
|
Random random = new Random();
|
|
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
|
|
Paint paint2 = new Paint(Paint.ANTI_ALIAS_FLAG);
|
|
Paint fadePaint;
|
|
Paint fadePaintBack;
|
|
|
|
public TooltipDrawableView(Context context) {
|
|
super(context);
|
|
paint.setColor(ColorUtils.setAlphaComponent(Theme.getColor(Theme.key_chat_gifSaveHintText), (int) (255 * 0.3f)));
|
|
paint2.setColor(Theme.getColor(Theme.key_chat_gifSaveHintText));
|
|
|
|
fadePaint = new Paint();
|
|
LinearGradient gradient = new LinearGradient(0, AndroidUtilities.dp(4), 0, 0, new int[]{0, 0xffffffff}, new float[]{0f, 1f}, Shader.TileMode.CLAMP);
|
|
fadePaint.setShader(gradient);
|
|
fadePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
|
|
|
|
fadePaintBack = new Paint();
|
|
gradient = new LinearGradient(0, 0, 0, AndroidUtilities.dp(4), new int[]{0, 0xffffffff}, new float[]{0f, 1f}, Shader.TileMode.CLAMP);
|
|
fadePaintBack.setShader(gradient);
|
|
fadePaintBack.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
|
|
}
|
|
|
|
float progress = 1f;
|
|
float fromProgress = 0;
|
|
float toProgress;
|
|
|
|
|
|
@Override
|
|
protected void onDraw(Canvas canvas) {
|
|
super.onDraw(canvas);
|
|
canvas.saveLayerAlpha(0, 0, getMeasuredWidth(), getMeasuredHeight(), 255, Canvas.ALL_SAVE_FLAG);
|
|
int rectSize = getMeasuredWidth() / 2 - AndroidUtilities.dp(3);
|
|
int totalHeight = (rectSize + AndroidUtilities.dp(1)) * 7 + AndroidUtilities.dp(1);
|
|
float progress = CubicBezierInterpolator.EASE_OUT.getInterpolation(this.progress > 0.4f ? (this.progress - 0.4f) / 0.6f : 0);
|
|
float p = fromProgress * (1f - progress) + toProgress * progress;
|
|
canvas.save();
|
|
canvas.translate(0, -(totalHeight - (getMeasuredHeight() - AndroidUtilities.dp(4))) * p);
|
|
for (int i = 0; i < 7; i++) {
|
|
int y = AndroidUtilities.dp(3) + i * (rectSize + AndroidUtilities.dp(1));
|
|
AndroidUtilities.rectTmp.set(0, y, rectSize, y + rectSize);
|
|
canvas.drawRoundRect(AndroidUtilities.rectTmp, AndroidUtilities.dp(2), AndroidUtilities.dp(2), paint);
|
|
AndroidUtilities.rectTmp.set(rectSize + AndroidUtilities.dp(1), y, rectSize + AndroidUtilities.dp(1) + rectSize, y + rectSize);
|
|
canvas.drawRoundRect(AndroidUtilities.rectTmp, AndroidUtilities.dp(2), AndroidUtilities.dp(2), paint);
|
|
}
|
|
canvas.restore();
|
|
|
|
canvas.drawRect(0, 0, getMeasuredWidth(), AndroidUtilities.dp(4), fadePaint);
|
|
canvas.translate(0, getMeasuredHeight() - AndroidUtilities.dp(4));
|
|
canvas.drawRect(0, 0, getMeasuredWidth(), AndroidUtilities.dp(4), fadePaintBack);
|
|
|
|
canvas.restore();
|
|
|
|
float y = AndroidUtilities.dp(3) + (getMeasuredHeight() - AndroidUtilities.dp(15 + 6)) * p;
|
|
AndroidUtilities.rectTmp.set(getMeasuredWidth() - AndroidUtilities.dp(3), y, getMeasuredWidth(), y + AndroidUtilities.dp(15));
|
|
canvas.drawRoundRect(AndroidUtilities.rectTmp, AndroidUtilities.dp(1.5f), AndroidUtilities.dp(1.5f), paint2);
|
|
float cy = AndroidUtilities.rectTmp.centerY();
|
|
float cx = rectSize + AndroidUtilities.dp(0.5f);
|
|
AndroidUtilities.rectTmp.set(cx - AndroidUtilities.dp(8), cy - AndroidUtilities.dp(3), cx + AndroidUtilities.dp(8), cy + AndroidUtilities.dp(3));
|
|
canvas.drawRoundRect(AndroidUtilities.rectTmp, AndroidUtilities.dp(3), AndroidUtilities.dp(3), paint2);
|
|
|
|
this.progress += 16 / 1000f;
|
|
if (this.progress > 1f) {
|
|
fromProgress = toProgress;
|
|
toProgress = Math.abs(random.nextInt() % 1001) / 1000f;
|
|
if (toProgress > fromProgress) {
|
|
toProgress += 0.3f;
|
|
} else {
|
|
toProgress -= 0.3f;
|
|
}
|
|
toProgress = Math.max(0, Math.min(1 ,toProgress));
|
|
this.progress = 0;
|
|
}
|
|
invalidate();
|
|
}
|
|
}
|
|
}
|