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:
parent
6b92cd9651
commit
2a4bedbccf
3 changed files with 25 additions and 16 deletions
|
@ -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();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
18
app/src/main/res/drawable/asld_bookmark_24dp.xml
Normal file
18
app/src/main/res/drawable/asld_bookmark_24dp.xml
Normal 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>
|
|
@ -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">
|
||||
|
|
Loading…
Reference in a new issue