Fix sharp corners on placeholders (#7142)

All placeholder now have round corners matching the corner radius of the
image that will eventually load.
This commit is contained in:
flofriday 2024-04-27 11:28:30 +02:00 committed by GitHub
parent f69822582d
commit c063c59af3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 40 additions and 13 deletions

View File

@ -24,6 +24,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import de.danoeh.antennapod.R; import de.danoeh.antennapod.R;
import de.danoeh.antennapod.ui.common.ImagePlaceholder;
import de.danoeh.antennapod.ui.screen.preferences.PreferenceActivity; import de.danoeh.antennapod.ui.screen.preferences.PreferenceActivity;
import de.danoeh.antennapod.ui.screen.AllEpisodesFragment; import de.danoeh.antennapod.ui.screen.AllEpisodesFragment;
import de.danoeh.antennapod.ui.screen.download.CompletedDownloadsFragment; import de.danoeh.antennapod.ui.screen.download.CompletedDownloadsFragment;
@ -314,13 +315,14 @@ public class NavListAdapter extends RecyclerView.Adapter<NavListAdapter.Holder>
return; return;
} }
float radius = 4 * context.getResources().getDisplayMetrics().density;
Glide.with(context) Glide.with(context)
.load(feed.getImageUrl()) .load(feed.getImageUrl())
.apply(new RequestOptions() .apply(new RequestOptions()
.placeholder(R.color.light_gray) .placeholder(ImagePlaceholder.getDrawable(context, radius))
.error(R.color.light_gray) .error(ImagePlaceholder.getDrawable(context, radius))
.transform(new FitCenter(), .transform(new FitCenter(),
new RoundedCorners((int) (4 * context.getResources().getDisplayMetrics().density))) new RoundedCorners((int) radius))
.dontAnimate()) .dontAnimate())
.into(holder.image); .into(holder.image);

View File

@ -52,6 +52,7 @@ import de.danoeh.antennapod.storage.database.DBReader;
import de.danoeh.antennapod.ui.common.Converter; import de.danoeh.antennapod.ui.common.Converter;
import de.danoeh.antennapod.ui.common.DateFormatter; import de.danoeh.antennapod.ui.common.DateFormatter;
import de.danoeh.antennapod.ui.common.CircularProgressBar; import de.danoeh.antennapod.ui.common.CircularProgressBar;
import de.danoeh.antennapod.ui.common.ImagePlaceholder;
import de.danoeh.antennapod.ui.common.ThemeUtils; import de.danoeh.antennapod.ui.common.ThemeUtils;
import de.danoeh.antennapod.ui.cleaner.ShownotesCleaner; import de.danoeh.antennapod.ui.cleaner.ShownotesCleaner;
import de.danoeh.antennapod.ui.episodes.ImageResourceUtils; import de.danoeh.antennapod.ui.episodes.ImageResourceUtils;
@ -286,10 +287,11 @@ public class ItemFragment extends Fragment {
txtvPublished.setContentDescription(DateFormatter.formatForAccessibility(item.getPubDate())); txtvPublished.setContentDescription(DateFormatter.formatForAccessibility(item.getPubDate()));
} }
float radius = 8 * getResources().getDisplayMetrics().density;
RequestOptions options = new RequestOptions() RequestOptions options = new RequestOptions()
.error(R.color.light_gray) .error(ImagePlaceholder.getDrawable(getContext(), radius))
.transform(new FitCenter(), .transform(new FitCenter(),
new RoundedCorners((int) (8 * getResources().getDisplayMetrics().density))) new RoundedCorners((int) radius))
.dontAnimate(); .dontAnimate();
Glide.with(this) Glide.with(this)

View File

@ -0,0 +1,19 @@
package de.danoeh.antennapod.ui.common;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import androidx.core.content.ContextCompat;
public class ImagePlaceholder {
public static Drawable getDrawable(Context context, float cornerRadius) {
GradientDrawable drawable = new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
int color = ContextCompat.getColor(context, R.color.light_gray);
drawable.setColor(color);
drawable.setCornerRadius(cornerRadius);
return drawable;
}
}

View File

@ -10,6 +10,7 @@ import com.bumptech.glide.load.resource.bitmap.FitCenter;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import de.danoeh.antennapod.net.discovery.PodcastSearchResult; import de.danoeh.antennapod.net.discovery.PodcastSearchResult;
import de.danoeh.antennapod.ui.common.ImagePlaceholder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -61,12 +62,12 @@ public class FeedDiscoverAdapter extends BaseAdapter {
final PodcastSearchResult podcast = getItem(position); final PodcastSearchResult podcast = getItem(position);
holder.imageView.setContentDescription(podcast.title); holder.imageView.setContentDescription(podcast.title);
float radius = 8 * context.getResources().getDisplayMetrics().density;
Glide.with(context) Glide.with(context)
.load(podcast.imageUrl) .load(podcast.imageUrl)
.apply(new RequestOptions() .apply(new RequestOptions()
.placeholder(R.color.light_gray) .placeholder(ImagePlaceholder.getDrawable(context, radius))
.transform(new FitCenter(), new RoundedCorners((int) .transform(new FitCenter(), new RoundedCorners((int) radius))
(8 * context.getResources().getDisplayMetrics().density)))
.dontAnimate()) .dontAnimate())
.into(holder.imageView); .into(holder.imageView);

View File

@ -18,6 +18,7 @@ import com.bumptech.glide.request.RequestOptions;
import java.util.List; import java.util.List;
import de.danoeh.antennapod.net.discovery.PodcastSearchResult; import de.danoeh.antennapod.net.discovery.PodcastSearchResult;
import de.danoeh.antennapod.ui.common.ImagePlaceholder;
public class OnlineSearchAdapter extends ArrayAdapter<PodcastSearchResult> { public class OnlineSearchAdapter extends ArrayAdapter<PodcastSearchResult> {
/** /**
@ -76,14 +77,14 @@ public class OnlineSearchAdapter extends ArrayAdapter<PodcastSearchResult> {
viewHolder.authorView.setVisibility(View.GONE); viewHolder.authorView.setVisibility(View.GONE);
} }
//Update the empty imageView with the image from the feed float radius = 4 * context.getResources().getDisplayMetrics().density;
Glide.with(context) Glide.with(context)
.load(podcast.imageUrl) .load(podcast.imageUrl)
.apply(new RequestOptions() .apply(new RequestOptions()
.placeholder(R.color.light_gray) .placeholder(ImagePlaceholder.getDrawable(context, radius))
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.transform(new FitCenter(), .transform(new FitCenter(),
new RoundedCorners((int) (4 * context.getResources().getDisplayMetrics().density))) new RoundedCorners((int) radius))
.dontAnimate()) .dontAnimate())
.into(viewHolder.coverView); .into(viewHolder.coverView);

View File

@ -13,6 +13,7 @@ import com.bumptech.glide.load.resource.bitmap.FitCenter;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners; import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import de.danoeh.antennapod.ui.common.ImagePlaceholder;
import de.danoeh.antennapod.ui.preferences.R; import de.danoeh.antennapod.ui.preferences.R;
import java.util.List; import java.util.List;
@ -43,12 +44,13 @@ public class SimpleIconListAdapter<T extends SimpleIconListAdapter.ListItem> ext
if (item.imageUrl == null) { if (item.imageUrl == null) {
view.findViewById(R.id.icon).setVisibility(View.GONE); view.findViewById(R.id.icon).setVisibility(View.GONE);
} else { } else {
float radius = 4 * context.getResources().getDisplayMetrics().density;
Glide.with(context) Glide.with(context)
.load(item.imageUrl) .load(item.imageUrl)
.apply(new RequestOptions() .apply(new RequestOptions()
.placeholder(ImagePlaceholder.getDrawable(context, radius))
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.transform(new FitCenter(), new RoundedCorners((int) .transform(new FitCenter(), new RoundedCorners((int) radius))
(4 * context.getResources().getDisplayMetrics().density)))
.dontAnimate()) .dontAnimate())
.into(((ImageView) view.findViewById(R.id.icon))); .into(((ImageView) view.findViewById(R.id.icon)));
} }