Animate buttons

This commit is contained in:
stom79 2018-12-03 19:19:36 +01:00
parent 769f7b49de
commit 91a286a8e0
6 changed files with 157 additions and 68 deletions

View File

@ -76,7 +76,7 @@ dependencies {
implementation 'com.vanniktech:emoji-one:0.6.0-SNAPSHOT'
implementation 'com.oguzdev:CircularFloatingActionMenu:1.0.2'
implementation 'com.github.franmontiel:LocaleChanger:0.9.2'
implementation 'com.github.stom79:SparkButton:1.0.8'
implementation 'com.github.stom79:SparkButton:1.0.9'
implementation 'com.github.GrenderG:Toasty:1.3.0'
playstoreImplementation "io.github.kobakei:ratethisapp:$ratethisappLibraryVersion"
}

View File

@ -126,6 +126,7 @@ public class Status implements Parcelable{
private List<String> conversationProfilePicture;
private String webviewURL = null;
private boolean isBoostAnimated = false, isFavAnimated = false;
protected Status(Parcel in) {
id = in.readString();
uri = in.readString();
@ -1167,4 +1168,20 @@ public class Status implements Parcelable{
public void setNumberLines(int numberLines) {
this.numberLines = numberLines;
}
public boolean isBoostAnimated() {
return isBoostAnimated;
}
public void setBoostAnimated(boolean boostAnimated) {
isBoostAnimated = boostAnimated;
}
public boolean isFavAnimated() {
return isFavAnimated;
}
public void setFavAnimated(boolean favAnimated) {
isFavAnimated = favAnimated;
}
}

View File

@ -42,7 +42,6 @@ import android.text.SpannableString;
import android.text.Spanned;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.MenuItem;
@ -301,7 +300,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
ImageView webview_preview_card;
LinearLayout left_buttons;
Button status_show_more_content;
SparkButton spark_button_fav;
SparkButton spark_button_fav, spark_button_reblog;
public View getView(){
return itemView;
@ -384,6 +383,7 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
left_buttons = itemView.findViewById(R.id.left_buttons);
status_show_more_content = itemView.findViewById(R.id.status_show_more_content);
spark_button_fav = itemView.findViewById(R.id.spark_button_fav);
spark_button_reblog = itemView.findViewById(R.id.spark_button_reblog);
}
}
@ -639,18 +639,24 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
final float scale = context.getResources().getDisplayMetrics().density;
holder.spark_button_fav.setActiveImageTint(R.color.marked_icon);
if( theme == THEME_DARK)
holder.spark_button_reblog.setActiveImageTint(R.color.boost_icon);
if( theme == THEME_DARK) {
holder.spark_button_fav.setInActiveImageTint(R.color.action_dark);
else if(theme == THEME_BLACK)
holder.spark_button_reblog.setInActiveImageTint(R.color.action_dark);
}else if(theme == THEME_BLACK) {
holder.spark_button_fav.setInActiveImageTint(R.color.action_black);
else
holder.spark_button_reblog.setInActiveImageTint(R.color.action_black);
}else {
holder.spark_button_fav.setInActiveImageTint(R.color.action_light);
holder.spark_button_reblog.setInActiveImageTint(R.color.action_light);
}
holder.spark_button_fav.setColors(R.color.marked_icon, R.color.marked_icon);
holder.spark_button_fav.setImageSize((int) (20 * iconSizePercent/100 * scale + 0.5f));
holder.spark_button_fav.pressOnTouch(false);
holder.spark_button_fav.setMinimumWidth((int)Helper.convertDpToPixel((20 * iconSizePercent/100 * scale + 0.5f),context));
holder.spark_button_reblog.setColors(R.color.boost_icon, R.color.boost_icon);
holder.spark_button_reblog.setImageSize((int) (20 * iconSizePercent/100 * scale + 0.5f));
holder.spark_button_reblog.setMinimumWidth((int)Helper.convertDpToPixel((20 * iconSizePercent/100 * scale + 0.5f),context));
Drawable imgConversation = null;
if( type != RetrieveFeedsAsyncTask.Type.CONTEXT && ((status.getIn_reply_to_account_id() != null && status.getIn_reply_to_account_id().equals(status.getAccount().getId()))
@ -1201,20 +1207,20 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
Drawable imgReblog, imgReply;
if( status.isReblogged()|| (status.getReblog() != null && status.getReblog().isReblogged())) {
changeDrawableColor(context, R.drawable.ic_repeat_boost,R.color.boost_icon);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat_boost);
}else {
if( theme == THEME_DARK )
changeDrawableColor(context, R.drawable.ic_repeat,R.color.action_dark);
else if(theme == THEME_BLACK)
changeDrawableColor(context, R.drawable.ic_repeat,R.color.action_black);
else
changeDrawableColor(context, R.drawable.ic_repeat,R.color.action_light);
imgReblog = ContextCompat.getDrawable(context, R.drawable.ic_repeat);
if( !status.isFavAnimated() ) {
if (status.isFavourited() || (status.getReblog() != null && status.getReblog().isFavourited())) {
holder.spark_button_fav.setChecked(true);
} else {
holder.spark_button_fav.setChecked(false);
}
}
if( !status.isBoostAnimated()){
if( status.isReblogged()|| (status.getReblog() != null && status.getReblog().isReblogged())) {
holder.spark_button_reblog.setChecked(true);
}else {
holder.spark_button_reblog.setChecked(false);
}
}
if( theme == THEME_DARK)
changeDrawableColor(context, R.drawable.ic_reply,R.color.action_dark);
@ -1225,12 +1231,9 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
imgReply = ContextCompat.getDrawable(context, R.drawable.ic_reply);
assert imgReblog != null;
imgReblog.setBounds(0,0,(int) (20 * iconSizePercent/100 * scale + 0.5f),(int) (20 * iconSizePercent/100 * scale + 0.5f));
assert imgReply != null;
imgReply.setBounds(0,0,(int) (20 * iconSizePercent/100 * scale + 0.5f),(int) (20 * iconSizePercent/100 * scale + 0.5f));
holder.status_reblog_count.setCompoundDrawables(imgReblog, null, null, null);
if(isCompactMode && ((status.getReblog() == null && status.getReplies_count() > 1) || (status.getReblog() != null && status.getReblog().getReplies_count() > 1))){
Drawable img = context.getResources().getDrawable( R.drawable.ic_plus_one );
@ -1367,22 +1370,30 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
});
if( status.isFavAnimated()){
holder.spark_button_fav.playAnimation();
status.setFavAnimated(false);
}
if( status.isBoostAnimated()){
holder.spark_button_reblog.playAnimation();
status.setBoostAnimated(false);
}
holder.spark_button_fav.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v(Helper.TAG,"status.isFavourited(): " + status.isFavourited());
holder.spark_button_fav.setChecked(status.isFavourited());
holder.spark_button_fav.animate();
if( !status.isFavourited())
status.setFavAnimated(true);
CrossActions.doCrossAction(context, type, status, null, (status.isFavourited()|| (status.getReblog() != null && status.getReblog().isFavourited()))? API.StatusAction.UNFAVOURITE:API.StatusAction.FAVOURITE, statusListAdapter, StatusListAdapter.this, true);
}
});
holder.status_reblog_count.setOnClickListener(new View.OnClickListener() {
holder.spark_button_reblog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if( !status.isReblogged())
status.setBoostAnimated(true);
CrossActions.doCrossAction(context, type, status, null, (status.isReblogged()|| (status.getReblog() != null && status.getReblog().isReblogged()))? API.StatusAction.UNREBLOG:API.StatusAction.REBLOG, statusListAdapter, StatusListAdapter.this, true);
}
});
@ -2253,7 +2264,6 @@ public class StatusListAdapter extends RecyclerView.Adapter implements OnPostAct
}
position++;
}
statusListAdapter.notifyDataSetChanged();
}else if( statusAction == API.StatusAction.UNFAVOURITE){
int position = 0;
for(Status status: statuses){

View File

@ -696,12 +696,21 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<RelativeLayout
<LinearLayout
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:layout_width="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="horizontal"
android:layout_height="wrap_content">
<com.varunest.sparkbutton.SparkButton
android:id="@+id/spark_button_reblog"
android:layout_width="30dp"
android:layout_height="30dp"
app:sparkbutton_activeImage="@drawable/ic_repeat_boost"
app:sparkbutton_inActiveImage="@drawable/ic_repeat"
app:sparkbutton_iconSize="20dp"
/>
<TextView
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"
@ -709,7 +718,7 @@
android:id="@+id/status_reblog_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_marginLeft="15dp"
@ -722,13 +731,10 @@
android:id="@+id/spark_button_fav"
android:layout_width="30dp"
android:layout_height="30dp"
app:sparkbutton_activeImageTint="@color/marked_icon"
app:sparkbutton_inActiveImageTint="@color/marked_icon"
app:sparkbutton_activeImage="@drawable/ic_star"
app:sparkbutton_inActiveImage="@drawable/ic_star_border"
app:sparkbutton_iconSize="20dp"
app:sparkbutton_primaryColor="@color/marked_icon"
app:sparkbutton_secondaryColor="@color/marked_icon" />
/>
<TextView
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"

View File

@ -19,6 +19,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_container"
android:paddingTop="10dp"
android:layout_marginStart="5dp"
@ -27,8 +28,7 @@
android:layout_marginRight="5dp"
android:divider="?android:dividerHorizontal"
android:showDividers="end"
android:orientation="vertical"
>
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -701,24 +701,52 @@
android:id="@+id/status_reply"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
<LinearLayout
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:id="@+id/status_reblog_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_gravity="center_vertical"
android:orientation="horizontal"
android:layout_height="wrap_content">
<com.varunest.sparkbutton.SparkButton
android:id="@+id/spark_button_reblog"
android:layout_width="30dp"
android:layout_height="30dp"
app:sparkbutton_activeImage="@drawable/ic_repeat_boost"
app:sparkbutton_inActiveImage="@drawable/ic_repeat"
app:sparkbutton_iconSize="20dp"
/>
<TextView
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:id="@+id/status_reblog_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:id="@+id/status_favorite_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:layout_gravity="center_vertical"
android:orientation="horizontal"
android:layout_height="wrap_content">
<com.varunest.sparkbutton.SparkButton
android:id="@+id/spark_button_fav"
android:layout_width="30dp"
android:layout_height="30dp"
app:sparkbutton_activeImage="@drawable/ic_star"
app:sparkbutton_inActiveImage="@drawable/ic_star_border"
app:sparkbutton_iconSize="20dp"
/>
<TextView
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:id="@+id/status_favorite_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ImageView
android:layout_marginLeft="15dp"

View File

@ -19,6 +19,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_container"
android:paddingTop="10dp"
android:layout_marginStart="5dp"
@ -27,8 +28,7 @@
android:layout_marginRight="5dp"
android:divider="?android:dividerHorizontal"
android:showDividers="end"
android:orientation="vertical"
>
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -616,24 +616,52 @@
android:id="@+id/status_reply"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_marginLeft="20dp"
android:layout_marginStart="20dp"
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:id="@+id/status_reblog_count"
<LinearLayout
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_marginLeft="20dp"
android:layout_marginStart="20dp"
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:id="@+id/status_favorite_count"
android:orientation="horizontal"
android:layout_height="wrap_content">
<com.varunest.sparkbutton.SparkButton
android:id="@+id/spark_button_reblog"
android:layout_width="30dp"
android:layout_height="30dp"
app:sparkbutton_activeImage="@drawable/ic_repeat_boost"
app:sparkbutton_inActiveImage="@drawable/ic_repeat"
app:sparkbutton_iconSize="20dp"
/>
<TextView
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:id="@+id/status_reblog_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:layout_gravity="center_vertical"
android:orientation="horizontal"
android:layout_height="wrap_content">
<com.varunest.sparkbutton.SparkButton
android:id="@+id/spark_button_fav"
android:layout_width="30dp"
android:layout_height="30dp"
app:sparkbutton_activeImage="@drawable/ic_star"
app:sparkbutton_inActiveImage="@drawable/ic_star_border"
app:sparkbutton_iconSize="20dp"
/>
<TextView
android:drawablePadding="2dp"
android:layout_gravity="center_vertical"
android:gravity="center_vertical"
android:id="@+id/status_favorite_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ImageView
android:layout_marginLeft="20dp"