1
0
Fork 0
mirror of https://github.com/MatomoCamp/matomocamp-companion-android.git synced 2024-09-19 16:13:46 +02:00

Implement an AnimatedStateListDrawable for the bookmark status icon

This commit is contained in:
Christophe Beyls 2019-05-11 22:11:02 +02:00
parent 6b92cd9651
commit 2a4bedbccf
3 changed files with 25 additions and 16 deletions

View file

@ -1,7 +1,5 @@
package be.digitalia.fosdem.widgets;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.widget.ImageButton;
import androidx.annotation.NonNull;
import androidx.lifecycle.LifecycleOwner;
@ -23,21 +21,14 @@ public class BookmarkStatusAdapter {
viewModel.getBookmarkStatus().observe(owner, bookmarkStatus -> {
if (bookmarkStatus == null) {
imageButton.setEnabled(false);
imageButton.setImageResource(R.drawable.ic_bookmark_outline_white_24dp);
imageButton.setSelected(false);
} else {
// Only animate updates, when the button was already enabled
final boolean animate = bookmarkStatus.isUpdate() && imageButton.isEnabled();
imageButton.setEnabled(true);
if (bookmarkStatus.isBookmarked()) {
imageButton.setContentDescription(imageButton.getContext().getString(R.string.remove_bookmark));
imageButton.setImageResource(animate ? R.drawable.avd_bookmark_add_24dp : R.drawable.ic_bookmark_white_24dp);
} else {
imageButton.setContentDescription(imageButton.getContext().getString(R.string.add_bookmark));
imageButton.setImageResource(animate ? R.drawable.avd_bookmark_remove_24dp : R.drawable.ic_bookmark_outline_white_24dp);
}
final Drawable drawable = imageButton.getDrawable();
if (drawable instanceof Animatable) {
((Animatable) drawable).start();
imageButton.setContentDescription(imageButton.getContext().getString(bookmarkStatus.isBookmarked() ? R.string.remove_bookmark : R.string.add_bookmark));
imageButton.setSelected(bookmarkStatus.isBookmarked());
// Only animate updates, when the button was already enabled
if (!bookmarkStatus.isUpdate() || !imageButton.isEnabled()) {
imageButton.jumpDrawablesToCurrentState();
}
}
});

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<animated-selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/selected"
android:drawable="@drawable/ic_bookmark_white_24dp"
android:state_selected="true" />
<item
android:id="@+id/unselected"
android:drawable="@drawable/ic_bookmark_outline_white_24dp" />
<transition
android:drawable="@drawable/avd_bookmark_add_24dp"
android:fromId="@id/unselected"
android:toId="@id/selected" />
<transition
android:drawable="@drawable/avd_bookmark_remove_24dp"
android:fromId="@id/selected"
android:toId="@id/unselected" />
</animated-selector>

View file

@ -75,7 +75,7 @@
<item name="android:enabled">false</item>
<item name="android:theme">@style/ThemeOverlay.AppCompat.Dark</item>
<item name="fabSize">normal</item>
<item name="srcCompat">@drawable/ic_bookmark_outline_white_24dp</item>
<item name="srcCompat">@drawable/asld_bookmark_24dp</item>
</style>
<style name="SeparatorLine">