1
0
mirror of https://github.com/NekoX-Dev/NekoX.git synced 2024-12-11 16:59:31 +01:00

Fix ChatEnterView baseline icon

This commit is contained in:
luvletter2333 2022-08-17 22:15:03 +08:00
parent 7d1f137c21
commit 575fd5a684
No known key found for this signature in database
GPG Key ID: A26A8880836E1978

View File

@ -1,9 +1,20 @@
package org.telegram.ui.Components;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.util.Property;
import android.view.View;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import com.fasterxml.jackson.databind.annotation.JsonAppend;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.R;
@ -13,103 +24,133 @@ import java.util.Objects;
public class ChatActivityEnterViewAnimatedIconView extends RLottieImageView {
private State currentState;
private TransitState animatingState;
private AnimatorSet emojiButtonAnimation;
// private TransitState animatingState;
private Map<TransitState, RLottieDrawable> stateMap = new HashMap<TransitState, RLottieDrawable>() {
@Nullable
@Override
public RLottieDrawable get(@Nullable Object key) {
RLottieDrawable obj = super.get(key);
if (obj == null) {
TransitState state = (TransitState) key;
int res = state.resource;
return new RLottieDrawable(res, String.valueOf(res), AndroidUtilities.dp(32), AndroidUtilities.dp(32));
}
return obj;
}
};
// private Map<TransitState, RLottieDrawable> stateMap = new HashMap<TransitState, RLottieDrawable>() {
// @Nullable
// @Override
// public RLottieDrawable get(@Nullable Object key) {
// RLottieDrawable obj = super.get(key);
// if (obj == null) {
// TransitState state = (TransitState) key;
// int res = state.resource;
// return new RLottieDrawable(res, String.valueOf(res), AndroidUtilities.dp(32), AndroidUtilities.dp(32));
// }
// return obj;
// }
// };
public ChatActivityEnterViewAnimatedIconView(Context context) {
super(context);
}
private static class PropertyAlpha extends Property<LayerDrawable, Integer> {
private final int index;
public PropertyAlpha(int index) {
super(Integer.class, "alpha");
this.index = index;
}
@Override
public void set(LayerDrawable object, Integer value) {
object.getDrawable(index).setAlpha(value);
}
@Override
public Integer get(LayerDrawable object) {
return object.getDrawable(index).getAlpha();
}
}
public void setState(State state, boolean animate) {
if (animate && state == currentState) {
return;
}
State fromState = currentState;
currentState = state;
if (!animate || fromState == null || getState(fromState, currentState) == null) {
RLottieDrawable drawable = stateMap.get(getAnyState(currentState));
drawable.stop();
drawable.setProgress(0, false);
setAnimation(drawable);
if (!animate || fromState == null) {
setImageResource(currentState.resource);
} else {
TransitState transitState = getState(fromState, currentState);
if (transitState == animatingState) {
return;
}
animatingState = transitState;
RLottieDrawable drawable = stateMap.get(transitState);
drawable.stop();
drawable.setProgress(0, false);
drawable.setAutoRepeat(0);
drawable.setOnAnimationEndListener(() -> animatingState = null);
setAnimation(drawable);
AndroidUtilities.runOnUIThread(drawable::start);
if (emojiButtonAnimation != null)
emojiButtonAnimation.cancel();
LayerDrawable mixed = new LayerDrawable(new Drawable[]{getResources().getDrawable(fromState.resource), getResources().getDrawable(currentState.resource)});
mixed.getDrawable(0).setAlpha(255);
mixed.getDrawable(1).setAlpha(0);
emojiButtonAnimation = new AnimatorSet();
emojiButtonAnimation.playTogether(
ObjectAnimator.ofInt(mixed, new PropertyAlpha(0), 0),
ObjectAnimator.ofInt(mixed, new PropertyAlpha(1), 255)
);
emojiButtonAnimation.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
if (animation.equals(emojiButtonAnimation)) {
emojiButtonAnimation = null;
}
}
});
emojiButtonAnimation.setDuration(200);
setImageDrawable(mixed);
emojiButtonAnimation.start();
}
}
private TransitState getAnyState(State from) {
for (TransitState transitState : TransitState.values()) {
if (transitState.firstState == from) {
return transitState;
}
}
return null;
}
// private TransitState getAnyState(State from) {
// for (TransitState transitState : TransitState.values()) {
// if (transitState.firstState == from) {
// return transitState;
// }
// }
// return null;
// }
//
// private TransitState getState(State from, State to) {
// for (TransitState transitState : TransitState.values()) {
// if (transitState.firstState == from && transitState.secondState == to) {
// return transitState;
// }
// }
// return null;
// }
//
// private enum TransitState {
// VOICE_TO_VIDEO(State.VOICE, State.VIDEO, R.raw.voice_to_video),
// STICKER_TO_KEYBOARD(State.STICKER, State.KEYBOARD, R.raw.sticker_to_keyboard),
// SMILE_TO_KEYBOARD(State.SMILE, State.KEYBOARD, R.raw.smile_to_keyboard),
// VIDEO_TO_VOICE(State.VIDEO, State.VOICE, R.raw.video_to_voice),
// KEYBOARD_TO_STICKER(State.KEYBOARD, State.STICKER, R.raw.keyboard_to_sticker),
// KEYBOARD_TO_GIF(State.KEYBOARD, State.GIF, R.raw.keyboard_to_gif),
// KEYBOARD_TO_SMILE(State.KEYBOARD, State.SMILE, R.raw.keyboard_to_smile),
// GIF_TO_KEYBOARD(State.GIF, State.KEYBOARD, R.raw.gif_to_keyboard),
// GIF_TO_SMILE(State.GIF, State.SMILE, R.raw.gif_to_smile),
// SMILE_TO_GIF(State.SMILE, State.GIF, R.raw.smile_to_gif),
// SMILE_TO_STICKER(State.SMILE, State.STICKER, R.raw.smile_to_sticker),
// STICKER_TO_SMILE(State.STICKER, State.SMILE, R.raw.sticker_to_smile);
//
// final State firstState, secondState;
// final int resource;
//
// TransitState(State firstState, State secondState, int resource) {
// this.firstState = firstState;
// this.secondState = secondState;
// this.resource = resource;
// }
// }
private TransitState getState(State from, State to) {
for (TransitState transitState : TransitState.values()) {
if (transitState.firstState == from && transitState.secondState == to) {
return transitState;
}
}
return null;
}
public enum State {
VOICE(R.drawable.baseline_mic_24),
VIDEO(R.drawable.baseline_camera_alt_24),
STICKER(R.drawable.deproko_baseline_stickers_24),
KEYBOARD(R.drawable.baseline_keyboard_24),
SMILE(R.drawable.baseline_emoticon_outline_24),
GIF(R.drawable.deproko_baseline_gif_24);
private enum TransitState {
VOICE_TO_VIDEO(State.VOICE, State.VIDEO, R.raw.voice_to_video),
STICKER_TO_KEYBOARD(State.STICKER, State.KEYBOARD, R.raw.sticker_to_keyboard),
SMILE_TO_KEYBOARD(State.SMILE, State.KEYBOARD, R.raw.smile_to_keyboard),
VIDEO_TO_VOICE(State.VIDEO, State.VOICE, R.raw.video_to_voice),
KEYBOARD_TO_STICKER(State.KEYBOARD, State.STICKER, R.raw.keyboard_to_sticker),
KEYBOARD_TO_GIF(State.KEYBOARD, State.GIF, R.raw.keyboard_to_gif),
KEYBOARD_TO_SMILE(State.KEYBOARD, State.SMILE, R.raw.keyboard_to_smile),
GIF_TO_KEYBOARD(State.GIF, State.KEYBOARD, R.raw.gif_to_keyboard),
GIF_TO_SMILE(State.GIF, State.SMILE, R.raw.gif_to_smile),
SMILE_TO_GIF(State.SMILE, State.GIF, R.raw.smile_to_gif),
SMILE_TO_STICKER(State.SMILE, State.STICKER, R.raw.smile_to_sticker),
STICKER_TO_SMILE(State.STICKER, State.SMILE, R.raw.sticker_to_smile);
final State firstState, secondState;
final int resource;
TransitState(State firstState, State secondState, int resource) {
this.firstState = firstState;
this.secondState = secondState;
State(int resource) {
this.resource = resource;
}
}
public enum State {
VOICE,
VIDEO,
STICKER,
KEYBOARD,
SMILE,
GIF
}
}