fix alpha animations
closes sk22#839
This commit is contained in:
@@ -63,7 +63,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
private final Runnable longClickRunnable = () -> {
|
private final Runnable longClickRunnable = () -> {
|
||||||
longClickPerformed = touchingView != null && touchingView.performLongClick();
|
longClickPerformed = touchingView != null && touchingView.performLongClick();
|
||||||
if (longClickPerformed && touchingView != null) {
|
if (longClickPerformed && touchingView != null) {
|
||||||
touchingView.startAnimation(opacityIn);
|
UiUtils.opacityIn(touchingView);
|
||||||
touchingView.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start();
|
touchingView.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -160,7 +160,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
if (!longClickPerformed) v.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start();
|
if (!longClickPerformed) v.animate().scaleX(1).scaleY(1).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(150).start();
|
||||||
if (disabled) return true;
|
if (disabled) return true;
|
||||||
if (action == MotionEvent.ACTION_UP && !longClickPerformed) v.performClick();
|
if (action == MotionEvent.ACTION_UP && !longClickPerformed) v.performClick();
|
||||||
else if (!longClickPerformed) v.startAnimation(opacityIn);
|
else if (!longClickPerformed) UiUtils.opacityIn(v);
|
||||||
} else if (action == MotionEvent.ACTION_DOWN) {
|
} else if (action == MotionEvent.ACTION_DOWN) {
|
||||||
longClickPerformed = false;
|
longClickPerformed = false;
|
||||||
touchingView = v;
|
touchingView = v;
|
||||||
@@ -168,13 +168,13 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
v.animate().scaleX(0.85f).scaleY(0.85f).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(75).start();
|
v.animate().scaleX(0.85f).scaleY(0.85f).setInterpolator(CubicBezierInterpolator.DEFAULT).setDuration(75).start();
|
||||||
if (disabled) return true;
|
if (disabled) return true;
|
||||||
v.postDelayed(longClickRunnable, ViewConfiguration.getLongPressTimeout());
|
v.postDelayed(longClickRunnable, ViewConfiguration.getLongPressTimeout());
|
||||||
v.startAnimation(opacityOut);
|
UiUtils.opacityOut(v);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onReplyClick(View v){
|
private void onReplyClick(View v){
|
||||||
v.startAnimation(opacityIn);
|
UiUtils.opacityIn(v);
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", item.accountID);
|
args.putString("account", item.accountID);
|
||||||
args.putParcelable("replyTo", Parcels.wrap(item.status));
|
args.putParcelable("replyTo", Parcels.wrap(item.status));
|
||||||
@@ -198,7 +198,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
|
|
||||||
private void onBoostClick(View v){
|
private void onBoostClick(View v){
|
||||||
if (GlobalUserPreferences.confirmBoost) {
|
if (GlobalUserPreferences.confirmBoost) {
|
||||||
v.startAnimation(opacityIn);
|
UiUtils.opacityIn(v);
|
||||||
onBoostLongClick(v);
|
onBoostLongClick(v);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -207,7 +207,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void boostConsumer(View v, Status r) {
|
private void boostConsumer(View v, Status r) {
|
||||||
v.startAnimation(opacityIn);
|
UiUtils.opacityIn(v);
|
||||||
bindText(boosts, r.reblogsCount);
|
bindText(boosts, r.reblogsCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -218,7 +218,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
AccountSession session = AccountSessionManager.getInstance().getAccount(item.accountID);
|
AccountSession session = AccountSessionManager.getInstance().getAccount(item.accountID);
|
||||||
|
|
||||||
Consumer<StatusPrivacy> doReblog = (visibility) -> {
|
Consumer<StatusPrivacy> doReblog = (visibility) -> {
|
||||||
v.startAnimation(opacityOut);
|
UiUtils.opacityOut(v);
|
||||||
session.getStatusInteractionController()
|
session.getStatusInteractionController()
|
||||||
.setReblogged(item.status, !item.status.reblogged, visibility, r->boostConsumer(v, r));
|
.setReblogged(item.status, !item.status.reblogged, visibility, r->boostConsumer(v, r));
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
@@ -271,7 +271,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
|
|
||||||
menu.findViewById(R.id.quote).setOnClickListener(c->{
|
menu.findViewById(R.id.quote).setOnClickListener(c->{
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
v.startAnimation(opacityIn);
|
UiUtils.opacityIn(v);
|
||||||
Bundle args=new Bundle();
|
Bundle args=new Bundle();
|
||||||
args.putString("account", item.accountID);
|
args.putString("account", item.accountID);
|
||||||
AccountSession accountSession=AccountSessionManager.getInstance().getAccount(item.accountID);
|
AccountSession accountSession=AccountSessionManager.getInstance().getAccount(item.accountID);
|
||||||
@@ -296,7 +296,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
private void onFavoriteClick(View v){
|
private void onFavoriteClick(View v){
|
||||||
favorite.setSelected(!item.status.favourited);
|
favorite.setSelected(!item.status.favourited);
|
||||||
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited, r->{
|
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setFavorited(item.status, !item.status.favourited, r->{
|
||||||
v.startAnimation(opacityIn);
|
UiUtils.opacityIn(v);
|
||||||
bindText(favorites, r.favouritesCount);
|
bindText(favorites, r.favouritesCount);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -318,7 +318,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
private void onBookmarkClick(View v){
|
private void onBookmarkClick(View v){
|
||||||
bookmark.setSelected(!item.status.bookmarked);
|
bookmark.setSelected(!item.status.bookmarked);
|
||||||
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked, r->{
|
AccountSessionManager.getInstance().getAccount(item.accountID).getStatusInteractionController().setBookmarked(item.status, !item.status.bookmarked, r->{
|
||||||
v.startAnimation(opacityIn);
|
UiUtils.opacityIn(v);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,7 +337,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onShareClick(View v){
|
private void onShareClick(View v){
|
||||||
v.startAnimation(opacityIn);
|
UiUtils.opacityIn(v);
|
||||||
Intent intent=new Intent(Intent.ACTION_SEND);
|
Intent intent=new Intent(Intent.ACTION_SEND);
|
||||||
intent.setType("text/plain");
|
intent.setType("text/plain");
|
||||||
intent.putExtra(Intent.EXTRA_TEXT, item.status.url);
|
intent.putExtra(Intent.EXTRA_TEXT, item.status.url);
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ public class GapStatusDisplayItem extends StatusDisplayItem{
|
|||||||
private void onViewClick(View v){
|
private void onViewClick(View v){
|
||||||
if(item.loading) return;
|
if(item.loading) return;
|
||||||
boolean isTop=v==top;
|
boolean isTop=v==top;
|
||||||
(isTop ? textTop : textBottom).startAnimation(UiUtils.opacityOut);
|
UiUtils.opacityOut(isTop ? textTop : textBottom);
|
||||||
V.setVisibilityAnimated((isTop ? progressTop : progressBottom), View.VISIBLE);
|
V.setVisibilityAnimated((isTop ? progressTop : progressBottom), View.VISIBLE);
|
||||||
item.parentFragment.onGapClick(this, isTop);
|
item.parentFragment.onGapClick(this, isTop);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package org.joinmastodon.android.ui.displayitems;
|
package org.joinmastodon.android.ui.displayitems;
|
||||||
|
|
||||||
import static org.joinmastodon.android.ui.utils.UiUtils.opacityIn;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.graphics.drawable.Animatable;
|
import android.graphics.drawable.Animatable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
@@ -30,6 +28,7 @@ import java.util.Locale;
|
|||||||
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
import me.grishka.appkit.imageloader.ImageLoaderViewHolder;
|
||||||
import me.grishka.appkit.imageloader.MovieDrawable;
|
import me.grishka.appkit.imageloader.MovieDrawable;
|
||||||
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
|
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
|
||||||
|
import me.grishka.appkit.utils.CubicBezierInterpolator;
|
||||||
import me.grishka.appkit.utils.V;
|
import me.grishka.appkit.utils.V;
|
||||||
|
|
||||||
public class TextStatusDisplayItem extends StatusDisplayItem{
|
public class TextStatusDisplayItem extends StatusDisplayItem{
|
||||||
@@ -201,6 +200,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
|||||||
translationProgress=findViewById(R.id.translation_progress);
|
translationProgress=findViewById(R.id.translation_progress);
|
||||||
translationButton.setOnClickListener(v->item.parentFragment.togglePostTranslation(item.status, item.parentID));
|
translationButton.setOnClickListener(v->item.parentFragment.togglePostTranslation(item.status, item.parentID));
|
||||||
}
|
}
|
||||||
|
if(translationButton!=null) translationButton.animate().cancel();
|
||||||
if(item.status.translationState==Status.TranslationState.HIDDEN){
|
if(item.status.translationState==Status.TranslationState.HIDDEN){
|
||||||
if(updateText) text.setText(item.text);
|
if(updateText) text.setText(item.text);
|
||||||
if(translationFooter==null) return;
|
if(translationFooter==null) return;
|
||||||
@@ -212,8 +212,8 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
|||||||
String displayLang=Locale.forLanguageTag(lang != null ? lang
|
String displayLang=Locale.forLanguageTag(lang != null ? lang
|
||||||
: AccountSessionManager.get(item.parentFragment.getAccountID()).preferences.postingDefaultLanguage).getDisplayLanguage();
|
: AccountSessionManager.get(item.parentFragment.getAccountID()).preferences.postingDefaultLanguage).getDisplayLanguage();
|
||||||
translationButton.setText(item.parentFragment.getString(R.string.translate_post, !displayLang.isBlank() ? displayLang : lang));
|
translationButton.setText(item.parentFragment.getString(R.string.translate_post, !displayLang.isBlank() ? displayLang : lang));
|
||||||
translationButton.setEnabled(true);
|
translationButton.setClickable(true);
|
||||||
translationButton.setAlpha(1);
|
translationButton.animate().alpha(1).setDuration(100).start();
|
||||||
translationInfo.setVisibility(View.GONE);
|
translationInfo.setVisibility(View.GONE);
|
||||||
UiUtils.beginLayoutTransition((ViewGroup) translationButtonWrap);
|
UiUtils.beginLayoutTransition((ViewGroup) translationButtonWrap);
|
||||||
}else{
|
}else{
|
||||||
@@ -221,8 +221,8 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
|||||||
if(item.status.translationState==Status.TranslationState.SHOWN){
|
if(item.status.translationState==Status.TranslationState.SHOWN){
|
||||||
translationProgress.setVisibility(View.GONE);
|
translationProgress.setVisibility(View.GONE);
|
||||||
translationButton.setText(R.string.translation_show_original);
|
translationButton.setText(R.string.translation_show_original);
|
||||||
translationButton.setEnabled(true);
|
translationButton.setClickable(true);
|
||||||
translationButton.setAlpha(1);
|
translationButton.animate().alpha(1).setDuration(200).start();
|
||||||
translationInfo.setVisibility(View.VISIBLE);
|
translationInfo.setVisibility(View.VISIBLE);
|
||||||
translationButton.setVisibility(View.VISIBLE);
|
translationButton.setVisibility(View.VISIBLE);
|
||||||
String displayLang=Locale.forLanguageTag(item.status.translation.detectedSourceLanguage).getDisplayLanguage();
|
String displayLang=Locale.forLanguageTag(item.status.translation.detectedSourceLanguage).getDisplayLanguage();
|
||||||
@@ -236,8 +236,8 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
|
|||||||
}
|
}
|
||||||
}else{ // LOADING
|
}else{ // LOADING
|
||||||
translationProgress.setVisibility(View.VISIBLE);
|
translationProgress.setVisibility(View.VISIBLE);
|
||||||
translationButton.setEnabled(false);
|
translationButton.setClickable(false);
|
||||||
translationButton.startAnimation(opacityIn);
|
translationButton.animate().alpha(UiUtils.ALPHA_PRESSED).setStartDelay(50).setDuration(300).setInterpolator(CubicBezierInterpolator.DEFAULT).start();
|
||||||
translationInfo.setVisibility(View.INVISIBLE);
|
translationInfo.setVisibility(View.INVISIBLE);
|
||||||
UiUtils.beginLayoutTransition((ViewGroup) translationButton.getParent());
|
UiUtils.beginLayoutTransition((ViewGroup) translationButton.getParent());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,9 +54,8 @@ import android.view.MenuItem;
|
|||||||
import android.view.SubMenu;
|
import android.view.SubMenu;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.view.ViewPropertyAnimator;
|
||||||
import android.view.WindowInsets;
|
import android.view.WindowInsets;
|
||||||
import android.view.animation.AlphaAnimation;
|
|
||||||
import android.view.animation.Animation;
|
|
||||||
import android.webkit.MimeTypeMap;
|
import android.webkit.MimeTypeMap;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
@@ -178,17 +177,6 @@ public class UiUtils {
|
|||||||
public static int MAX_WIDTH, SCROLL_TO_TOP_DELTA;
|
public static int MAX_WIDTH, SCROLL_TO_TOP_DELTA;
|
||||||
|
|
||||||
public static final float ALPHA_PRESSED=0.55f;
|
public static final float ALPHA_PRESSED=0.55f;
|
||||||
public static final Animation opacityOut, opacityIn;
|
|
||||||
|
|
||||||
static {
|
|
||||||
opacityOut = new AlphaAnimation(1, ALPHA_PRESSED);
|
|
||||||
opacityOut.setDuration(300);
|
|
||||||
opacityOut.setInterpolator(CubicBezierInterpolator.DEFAULT);
|
|
||||||
opacityOut.setFillAfter(true);
|
|
||||||
opacityIn = new AlphaAnimation(ALPHA_PRESSED, 1);
|
|
||||||
opacityIn.setDuration(400);
|
|
||||||
opacityIn.setInterpolator(CubicBezierInterpolator.DEFAULT);
|
|
||||||
}
|
|
||||||
|
|
||||||
private UiUtils() {
|
private UiUtils() {
|
||||||
}
|
}
|
||||||
@@ -1748,4 +1736,16 @@ public class UiUtils {
|
|||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.findFirst();
|
.findFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void opacityIn(View v){
|
||||||
|
v.animate().alpha(1).setDuration(400).setInterpolator(CubicBezierInterpolator.DEFAULT).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void opacityOut(View v){
|
||||||
|
opacityOut(v, ALPHA_PRESSED).start();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ViewPropertyAnimator opacityOut(View v, float alpha){
|
||||||
|
return v.animate().alpha(alpha).setDuration(300).setInterpolator(CubicBezierInterpolator.DEFAULT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user